对virtualenv使用单个站点包(作为例外)

时间:2012-12-04 12:37:23

标签: python lxml virtualenv

在virtualenv中,如何忽略单个包的no-site-packages规则?

一些背景知识:我使用virtualenv进行部署,但由于我使用lxml,因此需要花费更长的时间。每次重新安装新的virtualenv时,编译此过程最多需要15分钟。我可以为lxml制作某种例外并使用全局网站包吗?有没有比将它复制到新的virtualenv更安全/更可靠的选择?

1 个答案:

答案 0 :(得分:5)

简短回答:不,但你可以做点其他事来解决同样的问题。

--no-site-packages选项(除非您指定--system-site-packages,现在是默认选项)控制是否将某些目录添加到sys.path。给定目录是否存在,您不能仅区分该目录中的一个包。

但是,您可以在虚拟环境的site-packages目录中创建包的符号链接。在我的系统上:

ln -s /usr/lib/python2.7/site-packages/lxml ./env/lib/python2.7/site-packages

或者更一般地说(使用系统的python,而不是环境):

ln -s $(python -c 'import lxml, os.path; print(os.path.dirname(lxml.__file__)') ./env/lib/python2.7/site-packages

如果您使用的系统不支持符号链接,则复制也应该有效,但在更新系统范围的lxml时会更加脆弱。