如何让virtualenv更喜欢它的本地库而不是全局库

2024-05-01 21:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在没有根访问权限的大型服务器上使用python。我想使用比机器上全局安装的新版本的numpy。virtualenv正是为此目的而设计的,我创建了我的虚拟环境,并使用以下命令激活它:

virtualenv my_personal_python
source my_personal_python/bin/activate

然后安装我感兴趣的库的新版本

pip install numpy==1.6.0

问题是,当我现在导入numpy时,它仍然导入过时的全局版本,而不是虚拟环境的my_personal_python/lib/python2.6/site-packacges目录中的安装版本。

我已经知道一种可能的解决方案--no site packages标志,如:

virtualenv --no-site-packages my_personal_python

当我使用此标志时,导入将按我的意愿进行。但是我不想使用这个标志,因为我不想在本地重新安装所有软件包,我只想覆盖其中的几个。

(我使用的是Python2.6、Virtualenv1.6.1,而我的机器上的PYTHONPATH变量没有设置。)

更新即使我将site packages目录从虚拟环境添加到python路径的开头,numpy也不会从这个位置导入(尽管其他包是从这个位置导入的)。也许这个问题是特定于numpy的,并且通常不会在包中出现。


Tags: no版本numpy服务器目录机器权限virtualenv
3条回答

这对我有效。

我的which pythonwhich pip完全正确,但是sys.path是错误的。我的病毒在~/virtualenvs/envy。最初我在做:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7/site-packages:$PYTHONPATH

但这仍然是导入系统范围的包,而不是我的virtualenv包。但我看着this PyCon talk on virtualenv决定尝试:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7:$PYTHONPATH

注意第二个选项中缺少site-packages。这真的很管用!我希望它能帮助别人。

这个问题的另一个解决方案(至少对我有帮助):在我的~/.local/lib/python2.7/site-packages/easy-install.pth中,有(不必要的)像/usr/lib/python2.7/dist-packages这样的行。移除这些线路有帮助,也许它们是从很久以前遗留下来的,那时easy_install仍然会做一些奇怪的事情。

再检查一些东西。

which python

which pip

既然您确定运行的是正确的,那么启动python并:

import sys
print "\n".join(sys.path)

然后退出python并键入echo $PATH,然后键入echo $PYTHONPATH 我怀疑这个问题是可见的,如果您不能通过设置PYTHONPATH来解决它,那么您可以使用site模块来解决它。

相关问题 更多 >