Gtk*后端需要安装pygtk

Bac*_*ach 7 python gtk pygtk matplotlib

从一个虚拟环境中,试图加载它使用的脚本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.
Run Code Online (Sandbox Code Playgroud)

我为了生成代码而运行的代码ImportError如下:

import matplotlib as mpl
mpl.use('GTKAgg')
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

在停用我的虚拟环境后运行相同的代码时,一切顺利.

我认为这可能是由于版本差异造成的; 实际上,我的机器上存在这种差异.但是,虚拟环境中的版本更新(1.2.0对1.1.1rc),所以我不期望得到更少的支持.

如果不清楚:我的问题是如何允许pyplot使用GTKAgg后端导入新版本matplotlib,或者至少尝试了解导入失败的原因.

tac*_*ell 5

你可能通过以下方式创建了你的虚拟evn:

 $ virtualenv ~/.virtualenvs/my_env
Run Code Online (Sandbox Code Playgroud)

默认情况下,这可以看不到你的系统安装的软件包(包括pygtk)所以当你尝试运行mpl时,它会正确地抱怨你没有安装pygtk,因为(在virtualenv的上下文中)你没有.

您可以在virtualenv中构建和安装pygtk,也可以使用

$ virtualenv --system-site-packages ~/.virtualenvs/my_env
Run Code Online (Sandbox Code Playgroud)

(doc)这将使你的virtualenv继承你的全局包.