我工作的大公司使用自定义版本的Setuptools。这个私有的setuptools分支旨在解决我们组织特有的某些网络和安全问题。最重要的是,标准的Setuptools和Distribute都不会在我们的环境中按预期工作。
我想开始在系统上使用Ian Bicking优秀的VirtualEnv工具,特别是在我们需要能够为测试代码设置大量沙盒区域的测试系统中 - 例如在我们的持续集成环境中。
不幸的是,每当我尝试构建新的虚拟环境时,virtualenv工具都会尝试获取并安装最新的官方版本的Setuptools。由于上述原因,这将失败,并且还因为公司防火墙会阻止此操作。
而不是安装正式版:
setuptools-0.6c11-py2.4.egg
我想安装我们的定制版本,可能会被称为:
setuptools-foo-0.6c11-py2.4.egg
始终可以保证在系统的全球网站包中找到此蛋。我还可以保证它存在于我们所有的公司鸡蛋服务器中。
你能帮助我让我的virtualenv使用我的自定义setuptools而不是常规版本的setuptools。
答案 0 :(得分:2)
该名称在virtualenv.py中是硬编码的。您必须修补virtualenv.py或命名修补的setuptools egg'settingtools-0.6c11-py2.4.egg'
答案 1 :(得分: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]
答案 2 :(得分:0)
选项--extra-search-dir
允许定义包含所需版本的setuptools的本地目录。这在docs。