python - 为什么我的 virtualenv 的 pip 在我的 lib/python2.7 目录中列出了包?

标签 python virtualenv virtualenvwrapper

在我的家里,我有一个名为 lib/python2.7 的目录(实际上有五个这样的目录,用于不同的 python 版本)。由于这是共享主机( Webfaction ),因此该目录对我来说至关重要。在那里,我安装了 virtualenvvirtualenvwrapper 之类的东西,因为作为共享主机的客户,我无法访问 sudo 并安装全局包.

但是,当我创建 virtualenv 时:

$ mkvirtualenv myenvironment
$ workon myenvironment
$ which pip
# outputs the myenvironment's path to pip
$ pip freeze

该命令显示了我的lib/python2.7下的整个软件包列表(这包括相同的virtualenv软件包,以及由于...遗留...原因而导致的冲突软件包)。如果我想安装一个与 lib/python2.7 中的包名称相同的包,这也会让我烦恼,因为它不允许我更新它。

workon 环境中,我尝试检查 PYTHONPATH 是否有奇怪的东西,但它是空的:

$ echo $PYTHONPATH
# shows a blank line

如果我在任何虚拟环境中尝试该命令,它也是空的。

似乎 --no-site-packages 是默认的,但只解决了部分问题。这意味着:pip freeze | wc -l 在环境中显示的值比在任何环境中全局执行时显示的值都要小,这告诉我,某些已提供的软件包被排除在外,并且来自托管本身(并且未安装)由我来说,因为托管是共享的,而且我无法访问全局空间)。

我的问题是:我该如何解决这个问题?我希望我的 virtualenv 不列出 $HOME/lib/python2.7

中的包

请避免重复链接到 this question ,那里没有任何有用的东西,并且仍然没有公认的答案。我在阅读并尝试了该问题中的每个解决方案后写了这个问题

最佳答案

我认为你需要指定 python 版本。您可以使用类似命令指定要创建虚拟环境的Python版本

virtualenv -p /usr/bin/python3.4 virt/virtname --no-site-packages

因为当您未指定 python 版本时,virtualenv 会使用 pythonv2.7 创建一个环境,因此所有包最终都会位于您提到的文件夹中。

关于python - 为什么我的 virtualenv 的 pip 在我的 lib/python2.7 目录中列出了包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37288574/

相关文章:

python - 没有名为 'virtualenvwrapper' 的模块

python - 何时使用 * 和 ** 作为 python 函数中的函数参数

python - PyQt5 使用 QFileDialog 将 QlineEdit 保存到文本文件

python - 如何修复/usr/local/bin/virtualenv :/usr/bin/python: bad interpreter: No such file or directory?

virtualenvwrapper - conda 中是否有相当于 virtualenvwrapper 的钩子(Hook)脚本?

python - virtualenvwrapper 错误 : The path python2 (from --python=python2) does not exist

使用单独(顺序)Python 进程的 Python Nose 单元测试

python - 不同颜色的 Seaborn 回归图

django - 导入错误 : cannot import name _remove_dead_weakref in django virtualenv

python - Django 虚拟环境布局