[ ] Enables remote module importing through urllib2 and perforce.

author: Jure Vrscaj <>

last contributed versions: version: 0.72c (myevan <> fixes and improvements) version: 0.85b (alex <> fixes and improvements) version: 0.72d (jure <> found a bug and alex fixed it). homepage: license: MIT

download: all the project's files may be downloaded from bitbucket with hg: hg clone


import sys, urlimport urlimport.config(**{

'ssl_key.https://your.url':'key for this url' 'ssl_cert.https://your.url':'cert for this url', 'opener.https://your.url':'opener for this url', 'cache_time.http://your.url':'timedelta to keep files in cache for this url', 'no_cache.url':True, # don't cache modules from this url 'user_agent.url':'user agent header for this url', '':'key for this host' '':'cert for this host', '':'opener for this host', '':'timedelta to keep files in cache for this host', '':True, # don't cache modules from this host '':'user agent header for this host', 'ssl_key':'key for unspecified urls', 'ssl_cert':'cert for unspecified urls', 'opener':'opener for unspecified urls', 'no_cache':'True, #don't cache modules for unspecified urls 'user_agent':'user agent header for unspecified urls', 'cache_time':'timedelta to keep files in cache for unspecified urls', #if cache_time is missing, keep forever, but check last_modified and etag 'cache_dir':'root of the cache dir', # if missing, a temp dir will be created,

# if empty, no cache will be used
'py_version_string': '$PYTHON_VERSION', # string in path to be replaced by
# $major.$minor

'debug': int(level of output text. see debug() function)

}) # note: if you supply your own opener, i'd recommand inheriting/implementing the # status handling features from class DefaultErrorHandler below. sys.path.insert(0, "http://your.url") #this may already be there, like setting

#PYTHONPATH #but there is a danger default import #would try it before

expect to have access to your modules at http://your.url

TODO: - check what's mpath all about.

TODO later: - python 3.1 support. preliminary work done - url import of zipped modules - support of other urls, like ssh, svn, hg, bzr, cvs etc. - reload c extensions. well, they don't allways reload in local import either,

but my module does reload locally, so why not remotely? introspection will help.
  • swithch the usage of debug with some logging, and do some cleanup of the calls.