Python包在使用pip安装的虚拟环境中无法安装。

16 浏览
0 Comments

Python包在使用pip安装的虚拟环境中无法安装。

我在安装twisted时遇到了问题。

查看pip的版本:

pip 1.1 from /home/chris/GL/GLBackend/glenv/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)

创建一个虚拟环境:

chris@chris-mint ~/GL/GLBackend $ sudo virtualenv -p python2.7 glenv

在glenv/bin目录下创建了一个新的python可执行文件,并安装了distribute和pip。

为了避免权限问题,我将所有权限都开启了。

chris@chris-mint ~/GL/GLBackend $ sudo chmod -R 777 glenv

激活虚拟环境:

chris@chris-mint ~/GL/GLBackend $ source glenv/bin/activate

(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze

这里并没有列出twisted作为已安装的内容。

安装twisted:

(glenv)chris@chris-mint ~/GL/GLBackend $ sudo pip install twisted

twisted已经满足要求,无需升级。

但是当我安装时,它说已经安装过了。强制安装:

sudo pip install -I twisted

下载/安装twisted成功。

但是它仍然没有安装成功。

(glenv)chris@chris-mint ~/GL/GLBackend $ pip freeze

并没有列出twisted作为已安装的内容。

当我运行使用twisted的Python脚本时,出现了一个错误,提示twisted未安装:

ImportError: No module named twisted.python

0
0 Comments

问题的原因是你在不应该使用sudo命令,这导致pip试图安装到/usr/local/lib而不是~/glenv/lib。因为你使用了sudo,它成功地安装到了系统Python中,但这对你没有帮助,因为你没有在虚拟环境中允许系统的site-packages。

sudo pip导致这种行为的原因有很多,但最有可能的是这样的:在大多数系统上(包括我有立即访问权限的各种Mac和RHEL/CentOS盒子),sudoers文件会重置你的环境,然后重新添加一些白名单环境变量。这意味着当你使用sudo pip时,它将无法看到virtualenv设置的环境变量,因此它将退回到默认操作,安装到系统Python而不是你的虚拟环境。

但实际上,这是为什么发生的并不重要。答案是相同的:只需使用pip install而不是sudo pip install

注意,你还需要在virtualenv调用上去掉sudo,因为这可能会导致虚拟环境设置不正确(这就是为什么你需要sudo chmod,否则不需要)。在用户主目录下安装的整个意义在于你可以使用普通用户权限进行安装。

另外,你可能还希望升级到更新的virtualenv/pip版本,因为1.8和1.2有一些错误修复和改进。但我验证了即使使用最新的(1.8.4和1.2.1)版本,我遇到的问题和你完全相同,所以我认为这与此无关。

那么,如果我想将我的virtualenv安装在/opt文件夹中怎么办?我收到了一个Permission Denied错误。

你可以使用sudo创建一个子目录,给予你的用户或组权限,然后在那里执行所有的虚拟环境操作而不需要sudo。如果是针对普通用户,你可能更喜欢使用他们的主目录。

0
0 Comments

Python包无法在虚拟环境中使用pip安装的问题是因为使用了sudo pip命令。这将会在系统中安装该包,而不是在你创建的虚拟环境中安装。所以当它说要求已经满足时,可以查看它指向的目录。在你的情况下,当你试图安装时,它指向的目录是/usr/local/lib/python2.7/dist-packages

如果它在像/usr/local/lib/...这样的目录中,而不是指向你的虚拟环境文件夹,则它已经安装在你的系统中。否则,在正确的情况下,它会类似于这样/usr/local/lib/..../<name of your virtualenv>/lib

你可以随时使用which pythonwhich pip命令来查看它们是否都使用了我们虚拟环境的占位符。

原因:

使用sudo pip命令会在系统中安装包,而不是在虚拟环境中安装。

解决方法:

不使用sudo pip命令,而是直接使用pip命令来安装包。这样可以确保包被安装在虚拟环境中,而不是系统中。你可以通过运行which pythonwhich pip命令来验证它们是否都使用了虚拟环境的占位符。

0