问题描述
在virtualenv中,如何忽略单个软件包的no-site-packages
规则?
In a virtualenv, how can I ignore the no-site-packages
rule for a single package?
一些背景:我在部署中使用virtualenv,但是由于我一直使用lxml
,因此部署时间要长得多.每次重新安装新的virtualenv时,编译此过程最多需要15分钟.我可以为lxml
设置某种例外并使用全局站点包吗?除了将其复制到新的virtualenv中,还有其他更安全/可靠的选择吗?
Some background: I use virtualenv for my deployments, but these take a lot longer since I have been using lxml
. Compiling this takes up to 15 minutes each time I reinstall for a new virtualenv. Can I make some sort of an exception for lxml
and use the global site package? Is there any safer/more reliable option than just copying it into the new virtualenv?
推荐答案
简短的回答:不,但是您可以做其他事情来解决相同的问题.
Short answer: no, but you can do something else to solve the same problem.
--no-site-packages
选项(除非您指定--system-site-packages
,现在是默认选项)控制是否将某些目录添加到 sys.path
.给定目录是否存在,您不能仅区分该目录中的一个软件包.
The --no-site-packages
option (which is now the default unless you specify --system-site-packages
) controls whether or not some directories are added to sys.path
. A given directory is either in or not, you can not discriminate only one package in that directory.
但是,您可以在虚拟环境的site-packages
目录中建立指向软件包的符号链接.在我的系统上:
However, you can make a symbolic link to the package in the virtual environment’s site-packages
directory. On my system:
ln -s /usr/lib/python2.7/site-packages/lxml ./env/lib/python2.7/site-packages
或更笼统(使用系统的python,而不是环境的python):
Or more generically (using the system’s python, not the environment’s):
ln -s $(python -c 'import lxml, os.path; print(os.path.dirname(lxml.__file__)') ./env/lib/python2.7/site-packages
如果您使用的系统不支持符号链接,那么在更新系统范围的lxml时,复制也应该可以进行,但复制起来会更脆弱.
If you’re on a system that does not support symbolic links, copying should also work but is more fragile when the system-wide lxml is updated.
这篇关于对virtualenv使用单个站点包(作为例外)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!