Gtk*后端需要安装pygtk

7 投票
2 回答
14770 浏览
提问于 2025-04-17 21:39

在一个虚拟环境中,我尝试加载一个使用了 matplotlibGTKAgg 后端的脚本,但遇到了以下错误信息:

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

(文档),这样可以让你的虚拟环境继承你全局安装的包。

撰写回答