Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

from matplotlib.backends import _tkagg ImportError: cannot import name _tkagg

While trying to run this example to test how matplotlib works with Tkinter, I am getting the error:

(env)fieldsofgold@fieldsofgold-VirtualBox:~/new$ python test.py
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
  File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 13, in <module>
    import matplotlib.backends.tkagg as tkagg
  File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/matplotlib/backends/tkagg.py", line 7, in <module>
    from matplotlib.backends import _tkagg
ImportError: cannot import name _tkagg

Using the solution provided here, I've tried to uninstall matplotlib and install the tk and tk-dev packages by using these commands :

sudo apt-get install tk8.5
sudo apt-get install tk-dev

and then re-installing matplotlib again by pip install matplotlib but I am still getting the same error. Any help would be appreciated. I am using Ubuntu 14.04 on VirtualBox and working inside a virtualenv environment. Thanks so much.

like image 590
QPTR Avatar asked Aug 24 '15 17:08

QPTR


2 Answers

I just ran into this (Ubuntu 15.10 but same idea) and fixed it by:

sudo apt-get install tk-dev
pip uninstall -y matplotlib
pip --no-cache-dir install -U matplotlib

I think the third step was the critical one; if the cache is permitted then pip appeared to be just using the previously-built installation of matplotlib.

You can also manually remove the previously-built matplotlib; on Ubuntu it lives in ~/.cache/pip somewhere. (I couldn't find a way for pip to clean up its cache unfortunately.)

like image 132
lmjohns3 Avatar answered Oct 18 '22 22:10

lmjohns3


Python 3.7.4 on Windows 10, replacing NavigationToolbar2TkAgg with NavigationToolbar2Tk works for me.

Change from:

from matplotlib.backends.backend_tkagg import ( FigureCanvasTkAgg, NavigationToolbar2TkAgg)

To:

from matplotlib.backends.backend_tkagg import ( FigureCanvasTkAgg, NavigationToolbar2Tk)

like image 36
Harry Avatar answered Oct 18 '22 20:10

Harry