--- a/virtualenv/res/lib/lib_create_env.py Tue Jul 23 16:07:59 2013 +0200
+++ b/virtualenv/res/lib/lib_create_env.py Thu Jan 09 14:20:48 2014 +0100
@@ -16,22 +16,28 @@
URLS = {
#'': {'setup': '', 'url':'', 'local':''},
- 'PYCRYPTO': {'setup': 'pycrypto', 'url':'https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz', 'local':'pycrypto-2.6.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'PARAMIKO' : {'setup': 'paramiko', 'url':'https://github.com/paramiko/paramiko/archive/v1.10.1.tar.gz', 'local':'paramiko-1.10.1.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'FABRIC': {'setup': 'fabric', 'url':'https://github.com/fabric/fabric/tarball/1.6.0', 'local':'fabric-1.6.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
- 'MERCURIAL': {'setup': 'mercurial', 'url':'http://mercurial.selenic.com/release/mercurial-2.6.tar.gz', 'local':'mercurial-2.6.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'EDCSA': {'setup': 'edcsa', 'url':'https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.10.tar.gz', 'local':'ecdsa-0.10.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'WSGIREF': {'setup': 'wsgiref', 'url':'https://pypi.python.org/packages/source/w/wsgiref/wsgiref-0.1.2.zip', 'local':'wsgiref-0.1.2.zip', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'PYCRYPTO': {'setup': 'pycrypto', 'url':'http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.1.tar.gz', 'local':'pycrypto-2.6.1.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'PARAMIKO' : {'setup': 'paramiko', 'url':'https://github.com/paramiko/paramiko/archive/v1.12.0.tar.gz', 'local':'paramiko-1.12.0.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'FABRIC': {'setup': 'fabric', 'url':'https://pypi.python.org/packages/source/F/Fabric/Fabric-1.8.1.tar.gz', 'local':'Fabric-1.8.1.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
+ 'MERCURIAL': {'setup': 'mercurial', 'url':'http://mercurial.selenic.com/release/mercurial-2.8.2.tar.gz', 'local':'mercurial-2.8.2.tar.gz', 'install': {'method': 'pip', 'option_str': None, 'dict_extra_env': None}},
}
class ResourcesEnv(object):
- def __init__(self, src_base, urls, normal_installs):
+ def __init__(self, src_base, run_base, urls, normal_installs):
self.src_base = src_base
+ self.run_base = run_base
self.URLS = {}
self.__init_url(urls)
self.NORMAL_INSTALL = normal_installs
def get_src_base_path(self, fpath):
return os.path.abspath(os.path.join(self.src_base, fpath)).replace("\\","/")
+
+ def get_run_res_base_path(self, fpath):
+ return os.path.abspath(os.path.join(self.run_base, 'res', fpath)).replace("\\","/")
def __add_package_def(self, key, dict):
self.URLS[key] = dict
@@ -39,10 +45,14 @@
def __init_url(self, urls):
for key, url_dict in urls.items():
url_dict_copy = url_dict.copy()
+ if url_dict.get('install', {}).get('method','pip') == 'pip-req':
+ get_base_path = self.get_run_res_base_path
+ else:
+ get_base_path = self.get_src_base_path
if not url_dict['url'].startswith("http://"):
- url_dict_copy['url'] = self.get_src_base_path(url_dict['url'])
- url_dict_copy['local'] = self.get_src_base_path(url_dict['local'])
-
+ url_dict_copy['url'] = get_base_path(url_dict['url'])
+ url_dict_copy['local'] = get_base_path(url_dict['local'])
+
self.__add_package_def(key, url_dict_copy )
def ensure_dir(dir, logger):
@@ -169,13 +179,13 @@
install_zlib = gen_install_comp_lib("zlib", "ZLIB", [])
-def lib_generate_install_methods(path_locations, src_base, Logger, call_subprocess, normal_installs, options_to_add=None, urls= None):
+def lib_generate_install_methods(path_locations, src_base, run_base, Logger, call_subprocess, normal_installs, options_to_add=None, urls= None):
all_urls = URLS.copy()
if urls is not None:
all_urls.update(urls)
- res_env = ResourcesEnv(src_base, all_urls, normal_installs)
+ res_env = ResourcesEnv(src_base, run_base, all_urls, normal_installs)
def filter_python_develop(line):
if not line.strip():
@@ -188,15 +198,43 @@
return Logger.NOTIFY
- def normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess):
- logger.notify("Install %s from %s with %s" % (key,res_env.URLS[key][res_source_key],method))
+ def normal_install(key, res_path, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess):
+ logger.notify("Install %s from %s with %s" % (key,res_path,method))
if method == 'pip':
if sys.platform == 'win32':
- args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'pip')), 'install', res_env.URLS[key][res_source_key]]
+ args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'pip')), 'install', res_path]
else:
- args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', res_env.URLS[key][res_source_key]]
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', res_path]
if option_str :
- args.insert(4,option_str)
+ args.append(option_str)
+ if res_source_key == 'local':
+ if extra_env is None:
+ extra_env = {}
+ extra_env["PIP_DOWNLOAD_CACHE"] = res_env.get_src_base_path("")
+ args.insert(2, '-f')
+ args.insert(3, res_env.get_src_base_path(""))
+ args.insert(4, '--no-index')
+ logger.notify("Install %s from %s with %s args %s " % (key,res_path,method, repr(args)))
+ call_subprocess(args,
+ cwd=os.path.abspath(tmp_dir),
+ filter_stdout=filter_python_develop,
+ show_stdout=True,
+ extra_env=extra_env)
+ if method == 'pip-req':
+ if sys.platform == 'win32':
+ args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'pip')), 'install', '-r', res_path]
+ else:
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'pip')), 'install', '-r', res_path]
+ if option_str :
+ args.append(option_str)
+ if res_source_key == 'local':
+ if extra_env is None:
+ extra_env = {}
+ extra_env["PIP_DOWNLOAD_CACHE"] = res_env.get_src_base_path("")
+ args.insert(2, '-f')
+ args.insert(3, res_env.get_src_base_path(""))
+ args.insert(4, '--no-index')
+ logger.notify("Install %s from %s with %s args %s " % (key,res_path,method, repr(args)))
call_subprocess(args,
cwd=os.path.abspath(tmp_dir),
filter_stdout=filter_python_develop,
@@ -204,9 +242,9 @@
extra_env=extra_env)
else:
if sys.platform == 'win32':
- args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'easy_install')), res_env.URLS[key][res_source_key]]
+ args = [os.path.abspath(os.path.join(home_dir, 'Scripts', 'easy_install')), res_path]
else:
- args = [os.path.abspath(os.path.join(home_dir, 'bin', 'easy_install')), res_env.URLS[key][res_source_key]]
+ args = [os.path.abspath(os.path.join(home_dir, 'bin', 'easy_install')), res_path]
if option_str :
args.insert(1,option_str)
call_subprocess(args,
@@ -221,6 +259,7 @@
global logger
verbosity = options.verbose - options.quiet
+ print(repr(Logger))
logger = Logger([(Logger.level_for_integer(2-verbosity), sys.stdout)])
@@ -234,7 +273,7 @@
res_source_key = getattr(options, 'type_install') if hasattr(options, 'type_install') else 'local' #.get('type_install', 'local')
if res_source_key is None:
- res_source_key = local
+ res_source_key = 'local'
ignore_packages = []
@@ -249,9 +288,16 @@
logger.indent += 2
try:
for key in res_env.NORMAL_INSTALL:
- if key not in res_env.URLS:
- logger.notify("%s not found in def : passing" % (key,))
- install_options = res_env.URLS[key].get('install', None)
+ install_options = None
+ if isinstance(key, dict):
+ install_options = key.get('install', default_install_options)
+ install_options['method'] = 'pip-req'
+ res_path = res_env.get_run_res_base_path(key['requirement'])
+ else:
+ if key not in res_env.URLS:
+ logger.notify("%s not found in def : passing" % (key,))
+ install_options = res_env.URLS[key].get('install', None)
+ res_path = res_env.URLS[key][res_source_key]
if install_options is None:
install_options = default_install_options
method = install_options.get('method', default_install_options['method'])
@@ -270,7 +316,7 @@
elif method in globals() and callable(globals()[method]) and method not in ['pip', 'easy_install']:
globals()[method](option_str, extra_env, res_source_key, home_dir, lib_dir, tmp_dir, src_dir, res_env, logger, call_subprocess, filter_python_develop)
else:
- normal_install(key, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess)
+ normal_install(key, res_path, method, option_str, extra_env, res_source_key, home_dir, tmp_dir, res_env, logger, call_subprocess)
logger.notify("Clear source dir")
shutil.rmtree(src_dir)
@@ -283,10 +329,11 @@
def adjust_options(options, args):
if not options_to_add:
- pass
+ return
for opt in options_to_add:
test_opt = opt.split('=',1)[0]
- if not hasattr(options,test_opt) or getattr(options, test_opt) is None:
- setattr(options, test_opt,opt.split('=',1)[1] if "=" in opt else True)
+ #if not hasattr(options,test_opt) or getattr(options, test_opt) is None:
+ setattr(options, test_opt,opt.split('=',1)[1] if "=" in opt else True)
return adjust_options, extend_parser, after_install
+