4

I'm trying to use pylab (i.e., $ ipython3 --pylab) in Python 3 on Ubuntu 14.04. I'm running into the same error regardless of whether I use the Tkinter or Qt4 backends.

AttributeError: 'FontManager' object has no attribute 'ttf_lookup_cache'

This same basic plot routine (plt.plot([1,2,3,4])) works in the Python 2 pylab, however.

I've installed the necessary dependencies, to my knowledge (note, for both Python 2 and Python 3):

sudo apt-get install python-numpy python-scipy python-matplotlib
sudo apt-get install python3-numpy python3-scipy python3-matplotlib
sudo apt-get install python-tk python3-tk
sudo apt-get install libqt4gui libqt4core python-qt4 python3-qt4

Full tracebacks are available below. Here's with Tkinter:

$ ipython3 --matplotlib tk
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import matplotlib.pyplot as plt

In [2]: plt.plot([1,2,3,4])
Out[2]: [<matplotlib.lines.Line2D at 0x7f1496dc9c50>]

In [3]: Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1490, in __call__
    return self.func(*args)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 535, in callit
    func(*args)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 363, in idle_draw
    self.draw()
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 348, in draw
    FigureCanvasAgg.draw(self)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 451, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1035, in draw
    func(*args)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axes.py", line 2088, in draw
    a.draw(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1094, in draw
    renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1043, in _get_tick_bboxes
    extent = tick.label1.get_window_extent(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 755, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 321, in _get_layout
    ismath=False)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 214, in get_text_width_height_descent
    font = self._get_agg_font(prop)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 258, in _get_agg_font
    fname = findfont(prop)
  File "/usr/lib/python3/dist-packages/matplotlib/font_manager.py", line 1362, in findfont
    font = fontManager.findfont(prop, **kw)
  File "/usr/lib/python3/dist-packages/matplotlib/font_manager.py", line 1202, in findfont
    font_cache = self.ttf_lookup_cache
AttributeError: 'FontManager' object has no attribute 'ttf_lookup_cache'

And here's with Qt/Qt4:

$ ipython3 --matplotlib qt
WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
Type "copyright", "credits" or "license" for more information.

IPython 1.2.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import matplotlib.pyplot as plt

In [2]: plt.plot([1,2,3,4])
Out[2]: [<matplotlib.lines.Line2D at 0x7f0f840947f0>]

In [3]: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_qt4.py", line 374, in idle_draw
    self.draw()
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_qt4agg.py", line 154, in draw
    FigureCanvasAgg.draw(self)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 451, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1035, in draw
    func(*args)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axes.py", line 2088, in draw
    a.draw(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 56, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1094, in draw
    renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1043, in _get_tick_bboxes
    extent = tick.label1.get_window_extent(renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 755, in get_window_extent
    bbox, info, descent = self._get_layout(self._renderer)
  File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 321, in _get_layout
    ismath=False)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 214, in get_text_width_height_descent
    font = self._get_agg_font(prop)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 258, in _get_agg_font
    fname = findfont(prop)
  File "/usr/lib/python3/dist-packages/matplotlib/font_manager.py", line 1362, in findfont
    font = fontManager.findfont(prop, **kw)
  File "/usr/lib/python3/dist-packages/matplotlib/font_manager.py", line 1202, in findfont
    font_cache = self.ttf_lookup_cache
AttributeError: 'FontManager' object has no attribute 'ttf_lookup_cache'

If you suspect this is an IPython bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at ipython-dev@scipy.org

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True

In both cases, the plot window appears. In the case of Tkinter, the plot is blank (empty) but with Qt4 I do see the correct result--And the error still fires. Again, this works fine with either backend in Python 2.7. What am I missing?

6

I was able to resolve this issue by removing my matplotlib font cache (both the Python 3 and Python 2 font caches), e.g.,

rm /home/arthur/.cache/matplotlib/fontList*.cache

I can now use any other following environment initializations without errors:

ipython3 --pylab
ipython3 --matplotlib tk
ipython3 --matplotlib qt4
  • Thanks @Arthur I had the same problem, and this solved it! Wonder what was the problem? If I used Python3 installed with pyenv I got no errors.. – Håkon Hægland Jan 27 '15 at 7:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.