VirtualEnv/Pip尝试全局安装软件包

8

编辑 #2问题已解决,请查看下面。

我正在使用VirtualEnv和Flask编写一个小应用程序。这并不是我第一次这样做了,但是这一次和过去两次尝试时我遇到了相同的问题。当我 . flask/bin/activate 并尝试安装软件包 - 例如 pip install flup 时,它仍然被全局安装,而不是在VirtualEnv中。奇怪的是,只有在我 deactivate 之后才会发生这种情况,而且它是不一致的。

即,如果我一次性做完所有事情,并且偶尔在我 deactivate 之后,似乎可以安装所有需要的东西,但是在一定的时间间隔之后,它就停止工作,并开始尝试安装到我的全局Python site-packages 中。(自然,这也需要权限。在我还没有理解发生了什么之前,我试图用 sudo 强制执行它,认为我已经不小心地进行了 sudo virtualenv flask 或其他操作,但是不,出于某些其他原因,它正在变成全球性的。)

我没有使用--system-site-packages参数等任何有趣的东西,并且在出现这种情况之前我没有更改过我的VirtualEnv配置。第一次发生这种情况时,我认为这是一个偶然事件。现在它变得非常恼人,因为我不想在每次重新安装时卸载所有内容并重新安装它,或者祈祷我将在引导脚本中考虑到需要的所有内容。

我没有包含任何错误消息,因为它们并不是(或似乎不是)特别有价值的;它只是一遍又一遍地对我喊着 requirement already satisfied

编辑 #1我正在缩小问题范围,但我仍然没有解决方案。我在同一目录下创建了一个新的Flask项目, cd 进入其中,激活了它的VirtualEnv等,然后运行了 which pip 。它是新VirtualEnv的pip - 正确的pip。我deactivated之后, cd 返回到我的原始项目,激活VirtualEnv,然后运行 which pip 。它吐出了另一个项目的 - 新的那个 - pip。我 rm -r 删除了新的测试项目,返回到原始项目,再次运行 which pip ,它就吐出了 /usr/local/bin/pip 。哦。好的。

编辑 #2:解决方案我可能没有找到确切的原因,但我找到了解决方案。 bin/activate bin/pip 脚本本身以某种方式被更改了,可能是从意外运行两个VirtualEnvs(?)而导致的。也许这只是巧合,之前从未发生过三次。不知道。

我使用了catactivate,然后在第42行找到了相关内容。

VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask2/flask"

替代

VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask/flask"

我将它更改后,再次运行which pip,获得了正确的结果。尝试安装时,出现了一条堆栈跟踪信息,指向bin/pip,发现它的shebang路径是错误的。将其更改为正确的路径,一切都完美地运作了。

1
当您在不使用sudo的情况下运行它时,它是如何获得在全局Python上安装的权限的?还是它正在尝试并失败了? - Guy Gavriely
它一直在尝试并失败,但我无法弄清楚为什么它首先要尝试。 - Chase Ries
2
只需使用virtualenv的完整路径运行pip(即不依赖于搜索可执行路径),而且您甚至不需要激活环境。它会自动完成正确的操作。 - Joe Holloway
1
我也遇到了类似的问题。 这是因为我移动了环境位置。 我去编辑了激活路径,将其更改为正确的新位置 VIRTUAL_ENV="/Users/USERNAME/ENIVRONMENT_NAME" - MGM
4个回答

3

我有同样的问题。对我来说,原因是我的虚拟环境路径中有空格。

将虚拟环境移动到没有空格的路径解决了这个问题。


3
如果你已经重命名了包含ENV虚拟环境目录的项目目录,请尝试删除ENV目录,重新创建虚拟环境并激活它并重新安装pip依赖。
简而言之:删除虚拟环境,创建新的,激活它,并再次运行pip命令。

你的意思是虚拟环境的名称中不应该包含“env”吗?因为我在一个名字中带有“env”的虚拟环境中遇到了上述错误。(它也位于一个名字中带有“env”的目录中。) - Jeremiah Flaga
按照谷歌GAE网站的示例,解决方案是将env替换为另一个名称。 - Stephane Duteriez

0
在我的情况下,我的 pip.ini 文件指定了一个目标值:移除这个目标解决了问题。 损坏的 pip.ini
[global]
index-url = work-artifactory-cloud-api-key
trusted-host = work-artifactory-cloud
proxy = http://work-artifactory-cloud.com:2000/
target = ~/site-packages

修复了pip.ini文件

[global]
index-url = work-artifactory-cloud-api-key
trusted-host = work-artifactory-cloud
proxy = http://work-artifactory-cloud.com:2000/

如果您正在使用个人计算机,则可能不需要“index-url”、“trusted-host”和“proxy”。我不是很擅长Python,而且我更糟糕的是SysAdmin,但幸运的是我偶然发现了正确的GitHub问题,帮助我调试了这个问题:https://github.com/pypa/pip/issues/11154

您可以通过运行pip config debug找到您的pip.ini文件所在位置,并且您可以通过运行pip config list查看其中的内容。


-2
使用此链接({{link1:使用pip在virtualenv中安装Python包失败}})。
如果您的shebang正确,请确保在安装到虚拟环境时不要使用“sudo -H”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接