编辑#2找到解决方案;见下文。VirtualEnv/Pip尝试全局安装软件包
我正在使用VirtualEnv在Flask中编写一个小应用程序。这是我第一次做这件事,但这次和过去两次我试过我遇到过同样的问题。当我. flask/bin/activate
并尝试安装一个软件包 - 例如pip install flup
时,它将继续在全局安装,而不是在VirtualEnv中安装。奇怪的是,它只发生在我deactivate
之后,并且它在那里不一致。
要机智,我似乎能够安装我需要的一切,如果我做的这一切在一次,之后甚至偶尔我deactivate
,但一定时间后,它只是停止工作并开始试图安装到我的全球Python site-packages
。 (当然,它也会在这样做的时候请求权限,在我明白发生了什么之前,我试图用sudo
来强制它,认为我是不小心将它带到了自己身上sudo virtualenv flask
-ing什么的,但是不是,它会全球化)
我没有做任何有趣的事情,就像使用--system-site-packages
参数一样,并且在VirtualEnv配置开始之前我没有改变任何东西。第一次发生时,我把它写成了一种侥幸。现在它变得非常恼人,因为我没有心情卸载所有东西并每次重新安装它,或者祈祷我会在引导脚本中考虑到我需要的一切。
我没有包含任何错误消息,因为它们不是(或似乎不是)特别有价值;它只是requirement already satisfied
一遍又一遍地对我咆哮。
编辑#1我把这个问题稍微调了一下,但我仍然没有解决方案。我在同一个目录中创建了一个新的Flask项目,其中包括cd
- 激活了它的VirtualEnv等,然后运行which pip
。这是新的VirtualEnv的点子 - 正确的点子。我停用了,cd
-ed我的原始项目,激活VirtualEnv,并运行which pip
。它吐出了另一个项目 - 新的 - pip。我在rm -r
- 新的测试项目,回到原来的,再次运行which pip
,它吐出/usr/local/bin/pip
。哦。好。
编辑#2:解决方案我可能没有找到确切的原因,但我找到了解决方案。 bin/activate
和bin/pip
脚本本身发生了某种变化,可能是因为偶然在同一时间运行两个VirtualEnvs(?)。也许这只是巧合,它以前从未发生过,它连续发生三次。不知道。
我cat
-ed activate
果然,第42行,是
VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask2/flask"
,而不是
VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask/flask"
我改变了它,又跑到which pip
,并得到正确的结果。尝试安装,得到了一个堆栈跟踪,导致我bin/pip
,并发现其shebang是错误的。把它改成正确的道路,一切都完美无瑕。
在没有sudo的情况下运行它时,它如何获得安装在全局python上的权限?还是在尝试和失败? –
这是尝试和失败,但我不明白为什么它试图摆在首位。 –
只需运行virtualenv的pip及其完整路径(即不要依赖于搜索可执行文件路径),甚至不需要激活环境。它会做正确的事情。 –