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

2024-09-30 01:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我认为virtualenv应该封装并隐藏所有已经安装的包。但当我打字的时候

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

我得到:

^{pr2}$

即使使用--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 list会给我一个巨大的包列表,这是不正确的。那么,我该怎么办?在

当我在没有完整路径的情况下运行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)

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

第二次更新:

正在读取此堆栈溢出:sudo changes PATH - why? 我发现在ubuntu上你不能改变sudo的路径变量,但是这仍然让我困惑,因为它以前是工作的。。。所以我还是很困惑。有人知道吗?以前,我可以在virtualenv中输入sudo pip list并得到一个几乎为空的列表。对你也一样吗?在

编辑3:它还能做什么: 当我运行sudo pip install --download-cache=~/.pip-cache -r piprequirements.txt 它说所有的东西都已经安装好了,但是当我输入python时我不能导入它们,但是当我以sudo的形式运行python时,我可以导入它们。因此超级用户可以看到全局安装的包,但我需要使用sudo安装包,这样我就无法安装已经全局安装的包。{su7}也试着跑。所以这肯定是ubuntu的问题,以及运行sudo时环境路径的变化。不是每个人都会遇到这个问题吗?我相信很多人都在用ubuntu,不是吗?在


Tags: pip路径whichhome列表binvirtualenvubuntu

热门问题