在virtualenv中安装PyGtk
我在我的虚拟环境中(在控制台)尝试运行一个简单的matplotlib示例。代码如下:
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
radius = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
area = [3.14159, 12.56636, 28.27431, 50.26544, 78.53975, 113.09724]
plt.plot(radius, area)
plt.show()
但是,当我运行这个代码时,出现了以下错误:
ImportError: Gtk* 后端需要安装 pygtk。
接下来就有意思了。我尝试用 pip 安装 pygtk,但出现了:
********************************************************************
* Building PyGTK using distutils is only supported on windows. *
* To build PyGTK in a supported way, read the INSTALL file. *
********************************************************************
Complete output from command python setup.py egg_info:
********************************************************************
我查看了 INSTALL
文件,上面说要尝试 ./configure; make; make install
。不过,我不太确定如何在虚拟环境中做到这一点。我应该在哪里解压 pygtk 的源代码,以便在虚拟环境中安装?
5 个回答
在你的虚拟环境中,无法直接从PyPI安装pygtk
,所以
pip install pygtk
会下载但不会安装。你可以尝试下载压缩包文件,然后自己编译和安装,但如果可以链接到系统中已经安装的相关包,那么只需激活你的虚拟环境并安装ruamel.venvgtk
就可以了:
pip install ruamel.venvgtk
这是我自己工作的一个宣传,其他的解决方案在重复创建虚拟环境时效果都不好,比如tox
所做的那样。
在这些包的setup.py
文件中,会发生以下情况:
try:
import gtk
except ImportError:
print('--------------')
import subprocess
instdir = subprocess.check_output([
'/usr/bin/python',
'-c',
'import os, pygtk; print os.path.dirname(pygtk.__file__)',
]).strip()
for dst_base in sys.path:
if dst_base.strip():
break
for d in [
'pygtk.pth',
'pygtk.py',
'gtk-2.0',
'gobject',
'glib',
'cairo',
]:
src = os.path.join(instdir, d)
dst = os.path.join(dst_base, d)
if os.path.exists(src) and not os.path.exists(dst):
print('linking', d, 'to', dst_base)
os.symlink(src, dst)
也就是说,系统的Python会询问pygtk
安装在哪里(在Linux Mint 17.1上是/usr/lib/python2.7/dist-packages
),然后为激活的Python设置指向第一个非零长度路径的链接。
我做了以下操作:
用命令安装了 python-gtk2:
经过一些调查,我发现这个软件已经安装好了。不过,当我创建一个虚拟环境时,发现缺少了一些链接,于是我找到了这篇帖子: 在没有 site-packages 的 Ubuntu 上使用 Virtualenv。
我阅读了这篇帖子,并根据我的情况调整了里面的命令,步骤如下:
首先,我进入了我的虚拟环境并激活它,命令是:
source bin/activate
然后,我进入了虚拟环境中的 lib/python2.7 文件夹:
cd lib/python2.7
接着,我执行了以下命令:
$ ln -s /usr/lib/python2.7/dist-packages/cairo/ $ ln -s /usr/lib/python2.7/dist-packages/pygtk.py $ ln -s /usr/lib/python2.7/dist-packages/pygtk.pth $ ln -s /usr/lib/python2.7/dist-packages/gtk-2.0/
最后,为了检查,我输入了 'python',并执行了:
>>> import pygtk
没有出现错误,因此我知道它现在在我的虚拟环境中可用了。
我使用的是 Ubuntu 14.04(64位),在英特尔 Core i5 上。
诀窍是手动设置正确的路径,然后在虚拟环境中运行配置。这其实很简单,但对我来说有效。
在虚拟环境中安装 python-config,并将其链接到 python2.7-config:
pip install config
ln -s /home/PATH/TO/VIRT/bin/python-config /home/PATH/TO/VIRT/bin/python2.7-config
在虚拟环境中安装 cairo:
wget http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2
tar -xf py2cairo-1.10.0.tar.bz2
cd py2cairo-1.10.0
./waf configure --prefix=/home/PATH/TO/VIRT/
./waf build
./waf install
安装 PyGTK:
wget http://pypi.python.org/packages/source/P/PyGTK/pygtk-2.24.0.tar.bz2
tar -xf pygtk-2.24.0.tar.bz2
cd pygtk-2.24.0
export PKG_CONFIG_PATH=/home/PATH/TO/VIRT/lib/pkgconfig
./configure --prefix=/home/PATH/TO/VIRT/
make
make install
这样就可以了。只需将 PATH/TO/VIRT/ 替换为你自己的路径。我相信有人可以帮忙添加路径到 virtualenvwrapper?