【发布时间】:2014-01-23 10:40:16
【问题描述】:
编辑 #2 找到解决方案;见下文。
我正在使用 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-ed 到其中,激活了它的 VirtualEnv 等,然后运行which pip。这是新的 VirtualEnv 的点子——正确的点子。我停用了cd-ed 到我的原始项目,激活了 VirtualEnv,然后运行了which pip。它吐出另一个项目的 - 新项目的 - pip。我rm -r-ed 新的测试项目,回到原来的,再次运行which pip,它吐出/usr/local/bin/pip。哦。好的。
编辑#2:解决方案 我可能没有弄清楚确切的原因,但我确实找到了解决方案。 bin/activate 和 bin/pip 脚本本身以某种方式被更改,可能是由于意外同时运行了两个 VirtualEnv(?)。也许这只是巧合,以前从未发生过,连续发生了三次。不知道。
我 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(即不要依赖搜索可执行路径),甚至不需要激活环境。它会做正确的事。
-
我也发生了同样的事情。发生这种情况是因为我移动了环境位置。我去编辑了激活路径到其新的正确位置 VIRTUAL_ENV="/Users/USERNAME/ENIVRONMENT_NAME"
标签: python python-2.7 virtualenv pip