Gtk*后端需要安装pygtk
在一个虚拟环境中,我尝试加载一个使用了 matplotlib
的 GTKAgg
后端的脚本,但遇到了以下错误信息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/.virtualenvs/venv/local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 97, in <module>
_backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
File "/home/user/.virtualenvs/venv/local/lib/python2.7/site-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
globals(),locals(),[backend_name])
File "/home/user/.virtualenvs/venv/local/lib/python2.7/site-packages/matplotlib/backends/backend_gtkagg.py", line 10, in <module>
from matplotlib.backends.backend_gtk import gtk, FigureManagerGTK, FigureCanvasGTK,\
File "/home/user/.virtualenvs/venv/local/lib/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 16, in <module>
raise ImportError("Gtk* backend requires pygtk to be installed.")
ImportError: Gtk* backend requires pygtk to be installed.
为了产生这个 ImportError
错误,我运行的代码如下:
import matplotlib as mpl
mpl.use('GTKAgg')
import matplotlib.pyplot as plt
当我关闭虚拟环境后再运行同样的代码,一切都正常。
我猜这可能是因为版本不同;确实,我的电脑上存在这样的版本差异。不过,虚拟环境中的版本是 更新的(1.2.0 对比 1.1.1rc),所以我不认为会有支持不足的问题。
如果还不够清楚:我的问题是如何在 matplotlib
的新版本中允许使用 GTKAgg
后端导入 pyplot
,或者至少想了解一下导致这个导入失败的原因。
2 个回答
1
我不确定你是不是在用Ubuntu系统,不过为了让这个问题解决,我需要从源代码安装matplotlib。这里有一些关键的步骤(来自http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/):
$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install
我尝试过更改后端和使用--system-site-packages,但对我来说都没用。
5
你可能是通过类似下面的方式创建了你的虚拟环境:
$ virtualenv ~/.virtualenvs/my_env
默认情况下,这个虚拟环境是看不到你系统里安装的任何包(包括pygtk)的。所以当你尝试运行mpl时,它会正确地提示你没有安装pygtk,因为在这个虚拟环境里,你确实没有安装。
你可以选择在你的虚拟环境里构建并安装pygtk,或者你可以使用
$ virtualenv --system-site-packages ~/.virtualenvs/my_env
(文档),这样可以让你的虚拟环境继承你全局安装的包。