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

16

通常我会选择使用--no-site-packages选项创建虚拟环境,以获得更多的隔离性,同时也因为默认的Python全局包含了相当多的包,通常大部分都是不需要的。 然而我仍然希望保留一些特定的全局包,例如PIL或者psycopg2。有没有一种好的方法将它们包含在virtualenv中,并且可以轻松自动化?


相关:使用virtualenv安装特定的软件包 - Piotr Dobrogost
3个回答

12

如果你正在使用virtualenvwrapper,那么你可能可以使用postmkvirtualenv脚本来自动在新的虚拟环境sitepackages目录中创建符号链接。

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

忘记了这个问题,但最终我确实做到了这一点。 - Botond Béres

9

如果你正在使用 virtualenvwrapper,那么 shell 命令 add2virtualenv 应该存在于一个激活的虚拟环境中。请使用以下命令:

add2virtualenv /path/to/package

要将条目添加到虚拟环境site-packages中的PTH文件_virtualenv_path_extensions.pth,可以使用add2virtualenv。与自己创建符号链接相比,使用add2virtualenv的好处是,您可以通过在PTH文件中注释掉其行来防止导入该包。这使得更容易检查代码针对其依赖的多个库的几个版本的有效性。


是的,我同意这现在是更好的方式。虽然我非常确定几年前还没有这个选项。 - Botond Béres
可能它是不可用的。我肯定是virtualenvwrapper的忠实粉丝,因为有很多类似这样的小有用的东西。当然,你也可以手动完成,通过编写自己的PTH文件。 - pcurry

1
我实际上没有尝试过这个特定的包,但我猜测从全局 site-packages 到虚拟环境的 site-packages 建立一个简单的符号链接可能会起作用,并且这很容易编写脚本实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接