在我家里,我有一个名为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,没有什么是有用的,但仍然没有接受的答案。我在阅读并尝试该问题中的每个解决方案之后写了这个问题
答案 0 :(得分:0)
我认为你需要指定python版本。您可以使用
之类的命令指定要使用其创建虚拟环境的python版本virtualenv -p /usr/bin/python3.4 virt/virtname --no-site-packages
因为当你没有指定python版本时,virtualenv会创建一个带有pythonv2.7的环境,因此所有的包最终都会出现在你提到的文件夹中。
答案 1 :(得分:0)
深挖后找到解决方案。 这是一个Webfaction自定义但如果出现问题,这可能适用于此类任何安装。
问题的核心是 Webfaction为我们配置了sitecustomize.py文件。该文件位于/usr/local/lib/pythonX.Y/sitecustomize.py
并自行添加~/lib/pythonX.Y
的内容(如果您在其目录下工作以运行python,则有条件地添加~/webapps
下任何python应用程序的内容脚本)。
即使virtualenv的python可执行文件是另一个,它也会在每次运行时加载所说的sitecustomize.py
文件,就像基本的python可执行文件一样。
这里有解决方法吗?在virtualenv中创建一个空的sitecustomize.py来覆盖另一个:
touch ~/.virtualenvs/yourvenv/lib/pythonX.Y/sitecustomize.py
它会起作用。 Take this as reference if you are stuck here like I was
备注:将每个案例的X.Y替换为您正在使用的相应版本。另外请记住:您不能删除或编辑基本sitecustomize.py,因为您在共享主机中,在这种情况下。但是,只要你为每个想要的虚拟对象执行此操作,覆盖将适用于每个案例。