最近在使用Python进行开发时,我开始使用virtualenv。我喜欢使用--no-site-packages选项创建隔离的开发环境,但是在开发PyGTK应用程序时这样做可能有点棘手。
Ubuntu默认安装了PyGTK模块,我想让一个已经使用了--no-site-packages的virtualenv知道其他位置的特定模块。
这该如何解决呢?或者我应该放弃--no-site-packages选项吗?
最近在使用Python进行开发时,我开始使用virtualenv。我喜欢使用--no-site-packages选项创建隔离的开发环境,但是在开发PyGTK应用程序时这样做可能有点棘手。
Ubuntu默认安装了PyGTK模块,我想让一个已经使用了--no-site-packages的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)
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及以上版本的用户,在帖子中提到了一个解决方法。
在这种情况下,我发现符号链接,甚至复制特定文件(包、模块、扩展)非常有效。
它允许程序模拟在目标环境中运行,而不是改变应用程序以适应开发环境。
对于类似AppEngine的东西也是一样的。
https://dev59.com/l3I-5IYBdhLWcg3wN1lD#9716100
在这种情况下,他正在使用它来在创建新的Virtualenv之后导入PyQt和SIP,但您可以将所需的软件包添加到LIBS中。如果您想在virtualenv中包含相关系统的python gtk-2.0链接,只需使用pip安装ruamel.venvgtk:
pip install ruamel.venvgtk 您不需要导入任何内容,链接会在安装过程中设置。
如果您正在使用tox
,这将特别方便,因为在这种情况下,您只需要包含依赖项(对于tox):
deps:
pytest
ruamel.venvgtk
在运行测试之前,新设置的Python 2.7环境将包含相关链接。
有关链接设置的更详细信息,请参见此答案。