2014-01-06 76 views
6

编辑#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/activatebin/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是错误的。把它改成正确的道路,一切都完美无瑕。

+1

在没有sudo的情况下运行它时,它如何获得安装在全局python上的权限?还是在尝试和失败? –

+0

这是尝试和失败,但我不明白为什么它试图摆在首位。 –

+2

只需运行virtualenv的pip及其完整路径(即不要依赖于搜索可执行文件路径),甚至不需要激活环境。它会做正确的事情。 –

回答

1

我有同样的问题。对我而言,原因是我的艺术家在路上有空间。

将virtualenv移动到无空间路径解决了问题。

0

如果您已将您的项目目录重命名为包含ENV - 虚拟环境目录,请尝试清除ENV目录并重新创建virtualenv并将其激活并重新安装pip依赖项。

TL-DR; 删除虚拟环境,创建新环境,激活它并再次发出pip命令。

+0

你的意思是虚拟环境的名字中不应该有“env”吗? 因为我在虚拟环境中遇到了上面的错误,它的名称中包含“env”。 (它也位于名称中带有“env”的目录中。) –

相关问题