在 virtualenv 中,如何忽略no-site-packages
单个包的规则?
一些背景知识:我使用 virtualenv 进行部署,但自从我使用lxml
. 每次我为新的 virtualenv 重新安装时,编译它最多需要 15 分钟。lxml
我可以为全局站点包做某种例外并使用它吗?除了将其复制到新的 virtualenv 中之外,还有什么更安全/更可靠的选择吗?
在 virtualenv 中,如何忽略no-site-packages
单个包的规则?
一些背景知识:我使用 virtualenv 进行部署,但自从我使用lxml
. 每次我为新的 virtualenv 重新安装时,编译它最多需要 15 分钟。lxml
我可以为全局站点包做某种例外并使用它吗?除了将其复制到新的 virtualenv 中之外,还有什么更安全/更可靠的选择吗?
简短的回答:不,但你可以做其他事情来解决同样的问题。
该--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 时会更加脆弱。