在virtualenv中,当我使用list时,pip可以看到我的所有站点包,这是正常的吗?

时间:2014-09-21 12:49:45

标签: python pip virtualenv

我认为virtualenv应该封装并隐藏已安装的所有软件包。但是当我输入

$sudo virtualenv -p /usr/bin/python3 testenv
$source ~/testenv/bin/activate
$sudo pip list

我明白了:

apt-xapian-index (0.45)
argparse (1.2.1)
chardet (2.0.1)
cmsplugin-filer (0.10)
colorama (0.2.5)
command-not-found (0.3)
debtagshw (0.1)
defer (1.0.6)
dirspec (13.10)
...and many more

即使使用--local参数。 virtualenv被打破了吗?

当我输入:$ which pip时,我仍然得到:/home/jelikraftuser/testenv/bin/pip这似乎是正确的。

阅读这篇文章中的答案:pip installing in global site-packages instead of virtualenv 我发现直接用$sudo ~/testenv/bin/pip list运行pip的建议实际上有效,它只列出了2个包。但是当我运行which pip时,它会将virtualenv中的pip列为将要运行的pip。 所以我现在有点迷失了。使用完整路径调用pip列表给出了两个包的正确(小)列表,并且在没有完整路径的情况下调用pip列表给了我一个巨大的包列表,这是不正确的。那么,我从哪里开始呢?

当我在没有完整路径的情况下运行pip时,如何让它无法识别全局安装的软件包是否安装在virtualenv中?

好的更新!这有点儿有趣:

(testenv)$ pip --version
pip 1.5.6 from /home/jelikraftuser/testenv/lib/python3.4/site-packages (python 3.4)
(testenv)$ sudo pip --version
pip 1.5.4 from /usr/lib/python2.7/dist-packages (python 2.7)

当我运行pip作为sudo时,它运行一个,当我以非sudo运行它时,它运行一个不同的点。为什么会这样做?如果我要安装一个软件包,我将以sudo的身份运行它,所以我需要sudo来使用正确的pip。

第二次更新:

阅读此stackoverflow:sudo changes PATH - why? 我发现在ubuntu上你不能改变sudo的路径变量,但这仍然让我感到困惑,因为它之前正在工作......所以我仍然感到困惑。洞察任何人?以前我可以在virtualenv中键入sudo pip list并获得一个近乎空的列表。它对你有同感吗?

编辑3:它还做了什么: 当我运行sudo pip install --download-cache=~/.pip-cache -r piprequirements.txt时 它说一切都已经安装但是当我输入python时我无法导入它们,但是当我运行python作为sudo时我可以导入它们。因此,超级用户可以看到全局安装的软件包>但是我需要使用sudo来安装包>所以我无法安装已经全局安装的软件包。此外,当我尝试将pip3作为sudo运行时,它会显示sudo: pip3: command not found。所以这肯定是ubuntu的一个问题,以及运行sudo时环境路径如何变化。是不是所有人都遇到了这个问题呢?我相信很多人都在使用ubuntu,不是吗?

0 个答案:

没有答案