首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让virtualenv优先使用其本地库而不是全局库?

如何让virtualenv优先使用其本地库而不是全局库?
EN

Stack Overflow用户
提问于 2011-06-29 00:43:49
回答 3查看 13.2K关注 0票数 26

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

代码语言:javascript
复制
virtualenv my_personal_python
source my_personal_python/bin/activate

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

代码语言:javascript
复制
pip install numpy==1.6.0

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

我已经知道一种可能的解决方案,即--no-site-package标志,如下所示:

代码语言:javascript
复制
virtualenv --no-site-packages my_personal_python

当我使用这个标志时,导入的行为就像我想要的那样。但我不想使用这个标志,因为我不想在本地重新安装所有包,我只想覆盖其中的几个包。

(我使用的是python 2.6,virtualenv 1.6.1,并且我的机器上的PYTHONPATH变量没有设置。)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-07 13:27:26

仔细检查几件事。

which python

which pip

现在您确定您运行的是正确的,启动python并:

代码语言:javascript
复制
import sys
print "\n".join(sys.path)

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

票数 8
EN

Stack Overflow用户

发布于 2014-02-20 01:40:13

这对我很有效。

我的which pythonwhich pip是完全正确的,但是sys.path是错误的。我的虚拟环境在~/virtualenvs/envy中。最初我是这样做的:

代码语言:javascript
复制
export PYTHONPATH=~/virtualenvs/envy/lib/python2.7/site-packages:$PYTHONPATH

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

代码语言:javascript
复制
export PYTHONPATH=~/virtualenvs/envy/lib/python2.7:$PYTHONPATH

请注意,第二个选项中缺少site-packages。这确实起作用了!我希望它能帮助其他人。

票数 4
EN

Stack Overflow用户

发布于 2015-11-24 18:23:41

这个问题的另一个解决方案(至少对我有帮助):在我的~/.local/lib/python2.7/site-packages/easy-install.pth中,有像/usr/lib/python2.7/dist-packages这样的(我不必要的)行。删除这些代码行很有帮助,也许它们是从更老的时代遗留下来的,当时easy_install还在做更奇怪的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6510034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档