Python Ubuntu上的Virtualenv没有站点包

Python Ubuntu上的Virtualenv没有站点包,python,ubuntu,pygtk,virtualenv,Python,Ubuntu,Pygtk,Virtualenv,我最近在用python开发时一直在使用virtualenv。我喜欢使用--no site packages选项的独立开发环境,但是在开发PyGTK应用程序时这样做可能有点棘手。默认情况下,PyGTK模块安装在Ubuntu上,我想让virtualenv(没有站点包)知道位于系统其他地方的特定模块 最好的方法是什么?或者我应该放弃--no site packages选项吗?一种方法是使用sys.path将路径添加到代码中 import sys sys.path.append(somepath)

我最近在用python开发时一直在使用virtualenv。我喜欢使用--no site packages选项的独立开发环境,但是在开发PyGTK应用程序时这样做可能有点棘手。默认情况下,PyGTK模块安装在Ubuntu上,我想让virtualenv(没有站点包)知道位于系统其他地方的特定模块


最好的方法是什么?或者我应该放弃--no site packages选项吗?

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

import sys

sys.path.append(somepath)
import site

site.addsitedir(sitedir, known_paths=None)
另一种方法是使用site,它除了添加到sys.path之外还处理.pth文件

import sys

sys.path.append(somepath)
import site

site.addsitedir(sitedir, known_paths=None)

但您可能不想将其添加到所有相关代码中

我看到有人提到sitecustomize.py被用来执行类似的操作,但经过一些测试后,我无法让它像预期的那样工作

这里提到,sitecustomize.py的自动导入在2.5版中结束,如果您的应用程序不在2.5版中,请尝试一下。(只需将上面的路径add方法之一添加到文件中,并将其放到程序运行的目录中即可) 文章中提到了一种针对2.5及以上版本用户的变通方法


我发现在这种情况下,符号链接甚至复制特定文件(包、模块、扩展名)都非常有效

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


类似AppEngine的东西也一样。

请在此处查看PostkVirtualenv钩子脚本:

$ 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

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


并投票支持该脚本,因为它太棒了:)

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

pip安装ruamel.venvgtk 您没有导入任何内容,链接是在安装过程中设置的

如果您使用的是
tox
,那么这尤其方便,在这种情况下,您只需要包含依赖项(对于tox):

在运行测试之前,新设置的python2.7环境将包含相关链接


有关如何设置链接的更多详细信息,请参见

Yeh,但符号链接在哪里?我需要为PyGTK之类的东西做什么符号链接?链接到你的网站包。在我的Ubuntu上,我有/usr/lib/python-support/python-gtk2/python2.5/gtk-2.0/gtk。已经有了/var/lib/python-support/python2.5/gtk-2.0/gtk链接。这似乎是一个好的开始,你可能需要反复尝试。但是你可以为下一次编写脚本。这让我走上了正确的轨道,但是Ubuntu 11.10已经改变了一些事情。对于Ubuntu11.10中的python2.7,更像这样:ln-sf/usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth}lib/python2.7/site-packages注意:gtk文件夹和pth文件需要放在lib/python2.6/site-packages中,而不是放在lib/python2.6中。请参阅:这里是对keturns版本的一个小编辑,以使用env变量:$ln-sf/usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth}$VIRTUAL_-env/lib/python2.7/site-packages