我需要在没有root访问权限的大型服务器上使用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-package标志,如下所示:
virtualenv --no-site-packages my_personal_python
当我使用这个标志时,导入的行为就像我想要的那样。但我不想使用这个标志,因为我不想在本地重新安装所有包,我只想覆盖其中的几个包。
(我使用的是python 2.6,virtualenv 1.6.1,并且我的机器上的PYTHONPATH变量没有设置。)
更新即使我将虚拟环境中的site-packages目录添加到python路径的开头,numpy也不会从该位置导入(尽管其他包是从该位置导入的)。也许这个问题是numpy特有的,一般不会出现在包中。
发布于 2011-07-07 13:27:26
仔细检查几件事。
which python
which pip
现在您确定您运行的是正确的,启动python并:
import sys
print "\n".join(sys.path)
然后退出python,输入echo $PATH
,然后输入echo $PYTHONPATH
,我怀疑这个问题是可见的,如果您不能通过设置PYTHONPATH
来解决这个问题,那么您可以使用site
模块来解决这个问题。
发布于 2014-02-20 01:40:13
这对我很有效。
我的which python
和which 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
。这确实起作用了!我希望它能帮助其他人。
发布于 2015-11-24 18:23:41
这个问题的另一个解决方案(至少对我有帮助):在我的~/.local/lib/python2.7/site-packages/easy-install.pth
中,有像/usr/lib/python2.7/dist-packages
这样的(我不必要的)行。删除这些代码行很有帮助,也许它们是从更老的时代遗留下来的,当时easy_install还在做更奇怪的事情。
https://stackoverflow.com/questions/6510034
复制相似问题