Gtk* backend requires pygtk to be installed

Bach picture Bach · Mar 10, 2014 · Viewed 13.8k times · Source

From within a virtual environment, trying to load a script which uses matplotlib's GTKAgg backend, I fail with the following traceback:

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.

The code which I ran in order to produce that ImportError is as follows:

import matplotlib as mpl
mpl.use('GTKAgg')
import matplotlib.pyplot as plt

When running the very same code after deactivating my virtual environment, everything goes well.

I assumed this may be due to version differences; indeed, such differences exist on my machine. However, the version in the virtual environment is newer (1.2.0 versus 1.1.1rc), so I am not expecting less support.

In case it is not clear: my question is how to allow importing pyplot with GTKAgg backend on a new version of matplotlib, or at least an attempt to understand the reasons for this import failure.

Answer

tacaswell picture tacaswell · Mar 11, 2014

You probably created your virtual evn by something like:

 $ virtualenv ~/.virtualenvs/my_env

by default this can see none of your system-installed packages (including pygtk) so when you try to run mpl it rightly complains that you do not have pygtk installed because (with in the context of the virtualenv) you do not.

You can either build and install pygtk within your virtualenv or you can use

$ virtualenv --system-site-packages ~/.virtualenvs/my_env

(doc) which will make your virtualenv inherit from your global packages.