2011-05-11 105 views
3

的大公司,我的工作使用的setuptools的定制版本。这个setuptools的私有分支旨在处理特定于我们组织的特定网络和安全难题。底线是标准的Setuptools和Distribute都不会在我们的环境中按预期工作。如何让VirtualEnv使用setuptools的自定义版本?

我喜欢在系统上开始使用Ian Bicking的优秀VirtualEnv工具,特别是在我们需要能够为测试代码设置大量沙盒区域的测试系统中。在我们的持续集成环境中。

不幸的是,当我尝试构建新的虚拟环境时,virtualenv工具尝试获取并安装最新的官方版本的Setuptools。这会因上述原因而失败,并且因为企业防火墙会阻止该行为。

,而不是安装正式版的:

setuptools-0.6c11-py2.4.egg 

我想安装我们的定制版本可以称为是这样的:

setuptools-foo-0.6c11-py2.4.egg 

这鸡蛋总是可以保证被发现在系统的全球网站包。我也可以保证它存在于我们所有的公司鸡蛋服务器中。

你能帮我做我的virtualenv使用用户自己定制的setuptools而不是setuptools的普通版本。

回答

2

名称在virtualenv.py硬编码。你必须要么补丁virtualenv.py或命名修补setuptools的蛋“的setuptools-0.6c11-py2.4.egg”

1

我带到写我自己的包装脚本,进口的virtualenv。最主要的原因是,我使用dpkgs安装我的大部分依赖,包括distribute,所以我想避免下载额外的副本,当我创建一个新的环境 - 这有一个奖励,它运行得更快。

这里有一个底线的包装,你可以使用开始。我添加了一个评论,你可以插入一些代码来建立/自定义setuptools的代码复制到的virtualenv:

import os, subprocess, sys, virtualenv 

# virtualenv changed its internal api slightly after 1.5. 
NEW_API = (1, 5) 

def get_version(version): 
    return tuple([int(v) for v in version.split('.')]) 

def main(): 
    # set the logging level here 
    level = virtualenv.Logger.level_for_integer(0) 
    logger = virtualenv.Logger([(level, sys.stdout)]) 
    virtualenv.logger = logger 

    # insert your command-line parsing code here, if needed 
    root = sys.argv[1] 

    home, lib, inc, bin = virtualenv.path_locations(root) 
    result = virtualenv.install_python(home, lib, inc, bin, 
      site_packages=True, clear=False) 
    pyexec = os.path.abspath(result) 
    version = get_version(virtualenv.virtualenv_version) 
    if version < NEW_API: 
     virtualenv.install_distutils(lib, home) 
    else: 
     virtualenv.install_distutils(home) 
    virtualenv.install_activate(home, bin) 

    # insert whatever post-virtualenv-setup code you need here 

if __name__ == '__main__': 
    main() 

用法:

% python wrapper.py [path] 
0

有选择--extra-search-dir,允许定义一个局部包含所需版本的setuptools的目录。这在docs中有解释。

相关问题