Ubuntu上没有网站包的Virtualenv

我一直在使用virtualenv,而在Python开发。 我喜欢使用–no-site-packages选项的隔离开发环境的想法,但是在开发PyGTK应用程序时这样做可能有点棘手。 PyGTK模块默认安装在Ubuntu上,我想让virtualenv(使用–no-site-packages)知道系统中其他位置的特定模块。

什么是最好的方法来做到这一点? 或者我应该把它吸了,并放弃 – 无站点包选项?

$ virtualenv --no-site-packages --python=/usr/bin/python2.6 myvirtualenv $ cd myvirtualenv $ source bin/activate $ cd lib/python2.6/ $ ln -s /usr/lib/pymodules/python2.6/gtk-2.0/ $ ln -s /usr/lib/pymodules/python2.6/pygtk.pth $ ln -s /usr/lib/pymodules/python2.6/pygtk.py $ ln -s /usr/lib/pymodules/python2.6/cairo/ $ python >>> import pygtk >>> import gtk 

一种方法是使用sys.path将路径添加到您的代码中。

 import sys sys.path.append(somepath) 

另一种方法是使用网站,该网站除了添加到sys.path之外还处理.pth文件。

 import site site.addsitedir(sitedir, known_paths=None) 

https://docs.python.org/library/site.html

但是你可能不想把这个添加到你所有的相关代码中。

我已经看到提到sitecustomize.py被用来执行这样的事情,但经过一些测试,我不能像预期的那样工作。

这里它提到sitecustomize.py的自动导入以2.5结束,如果你不在2.5的话就试试看。 (只需将上面的路径添加方法之一添加到文件,并将其放在您的程序运行的目录中)2.5和以上的用户在帖子中提到了解决方法。

http://code.activestate.com/recipes/552729/

我发现在这种情况下,符号链接,甚至复制特定的文件(包,模块,扩展)工作得很好。

它允许程序模拟在目标环境中运行,而不是改变应用程序以适应开发环境。

像AppEngine一样的东西。

在这里查看postmkvirtualenv钩子脚本:

https://stackoverflow.com/a/9716100/60247

在这种情况下,在创建新的Virtualenv之后,他使用它来导入PyQt和SIP,但是您可以将所需的软件包添加到LIBS中。

和投票,因为它是太棒了:)

如果你想在virtualenv中包含相关系统的python gtk-2.0的链接,你可以使用pip来安装ruamel.venvgtk :

pip install ruamel.venvgtk你没有任何输入,链接在安装过程中设置。

如果使用tox ,这个特别方便,在这种情况下,只需要包含依赖关系(对于tox):

 deps: pytest ruamel.venvgtk 

并且新建立的python2.7环境将在测试运行之前包含相关的链接。

在这个答案中可以找到关于如何设置链接的更详细的信息