编辑 #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(?)而导致的。也许这只是巧合,之前从未发生过三次。不知道。
我使用了cat
和activate
,然后在第42行找到了相关内容。
VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask2/flask"
替代
VIRTUAL_ENV="/Users/chaseries/blueprint/python/flask/flask"
我将它更改后,再次运行
which pip
,获得了正确的结果。尝试安装时,出现了一条堆栈跟踪信息,指向bin/pip
,发现它的shebang路径是错误的。将其更改为正确的路径,一切都完美地运作了。