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