重要错误:没有名为“后端”的模块

2024-05-15 21:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始了解使用python和matplotlib使用pyGTK+进行交互式绘图。所以我看了一下example given at the matplotlib website

这是代码的简短练习:

#!/usr/bin/env python
"""
Example of embedding matplotlib in an application and interacting with
a treeview to store data.  Double click on an entry to update plot
data

"""
import pygtk
pygtk.require('2.0')
import gtk
from gtk import gdk

import matplotlib
matplotlib.use('GTKAgg')  # or 'GTK'
from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas

from numpy.random import random
from matplotlib.figure import Figure

如果我尝试在终端中运行此脚本,则会出现以下错误:

Traceback (most recent call last):
  File "gtk_spreadsheet.py", line 15, in <module>
    from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 33, in <module>
    from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_gdk.py", line 29, in <module>
    from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
ImportError: No module named _backend_gdk

我已经安装了python 2.7和pygtk2.24。

有人能找出错误的位置吗?我认为这可能与一些关联问题有关?


Tags: toinfrompyimportanbackendgtk
3条回答

这是刚才在我的系统上使用pip安装的matplotlib而不是apt安装的matplotlib的症状。如果在Ubuntu/Debian上,请尝试:

pip uninstall matplotlib
apt install python-matplotlib

我相信发生的事情是pip安装没有构建GTK输出所需的C扩展,但是apt包已经预先构建了扩展。我没有matplotlib的初始pip安装的日志,所以我无法确认发生了什么。

除了Haldean Brown的答案之外,请注意,如果您真的需要使用pip,您可以强制它在本地重新编译matplotlib,并使用--no-binary选项获得“setup.py所具有的深层魔力”:

pip uninstall matplotlib
pip install matplotlib --no-binary=matplotlib

这将解决您的问题,前提是您已经用sudo apt-get install python-gtk2-dev安装了gtk2

由于您希望使用GTKAgg后端,使用pip在将来将matplotlib冻结在支持它的版本上可能会很有用(deprecation警告指出它将在3.0中被删除):

pip install matplotlib==2.2.2 --no-binary=matplotlib

注意,您需要的Debian/Ubuntu包不是“pygtk2-devel”,而是“python-gtk2-dev”:

sudo apt-get install python-gtk2-dev

应该在这些平台上修复此错误。

相关问题 更多 >