将全局包包含在使用--no-site-packages创建的virtualenv中

时间:2010-05-04 17:11:29

标签: python virtualenv easy-install pip

我通常更喜欢使用--no-site-packages选项创建virtualenvs以获得更多隔离,并且因为默认的python全局包包含相当多的包,并且通常不需要大多数包。 但是我仍然希望在全局中保留一些选择包,比如PIL或psycopg2。是否有一种很好的方法将它们包含在virtualenv中,也可以轻松实现自动化?

3 个答案:

答案 0 :(得分:11)

如果您正在使用virtualenvwrapper,则可以使用postmkvirtualenv脚本在新的virtualenv sitepackages目录中自动创建符号链接。

#!/bin/sh
cdsitepackages
ln -s /path/to/system/site-packages/package-name
cdvirtualenv

答案 1 :(得分:8)

如果您使用virtualenvwrapper,则shell命令add2virtualenv应存在于活动的virtualenv中。使用:

add2virtualenv /path/to/package

在virtualenv网站包中向PTH文件_virtualenv_path_extensions.pth添加条目。

使用add2virtualenv而不是自己创建符号链接的好处是,您可以通过在PTH文件中注释掉它的行来删除可导入的包。这样可以更轻松地检查代码对其所依赖的库的多个版本的有效性。

答案 2 :(得分:0)

我还没有尝试使用这些特定的软件包,但我猜想从全局网站包中的一个简单的符号链接到virtualenv的网站包可能会有效,而且这很容易编写脚本。