35

When I try to import matplotlib I get an error

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py", line 128, in <module>
  from matplotlib.rcsetup import defaultParams, validate_backend, cycler
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/rcsetup.py", line 29, in <module>
    from matplotlib.fontconfig_pattern import parse_fontconfig_pattern
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/fontconfig_pattern.py", line 32, in <module>
    from backports.functools_lru_cache import lru_cache
ImportError: No module named functools_lru_cache

backports itself imports properly. When I try to install functools manually via

sudo pip install backports.functools_lru_cache

I get info that

Requirement already satisfied: backports.functools_lru_cache in /usr/local/lib/python2.7/dist-packages

Nevertheless when i try to

import backports.functools_lru_cache

I get info that

ImportError: No module named functools_lru_cache

System info Ubuntu 16 Python 2.7.12 Pip 9.0.1

Matimath
  • 351
  • 1
  • 3
  • 3

14 Answers14

40

If someone is still having that problem and reinstalling backports.functools_lru_cache do not work in his case, as it was in my case, then probably installing older version of matplotlib would work. For example:

pip install matplotlib==2.0.2

Problem occurred for version 2.2.0, I switched to 2.0.2 and it is working now. I did not check other versions.

Skoskm
  • 533
  • 5
  • 10
  • 3
    I had the same problem after updating Ubuntu to 18.04. This answer solved it for me. Note: I also had to uninstall matplotlib before via pip: `pip uninstall matplotlib` – ala May 03 '18 at 11:40
  • 1
    There should not be any reason for downgrading matplotlib. If someone thinks there is an issue with matplotlib, better inform the developpers about it. However, seen from the other answers here this problem should be solvable by getting the environment into which matplotlib is installed correctly set up. – ImportanceOfBeingErnest May 03 '18 at 18:44
  • 1
    This works like a charm. It also solves the mysterious import error of 'cbook' ( https://stackoverflow.com/questions/44623376/importerror-cannot-import-name-cbook ). – Shaohua Li Aug 20 '18 at 13:31
  • This worked! thanks a lot! I am trying to figure out the problem for more than an hour. Reinstalling my python, messing with the files on the lib/site-packages folder. – newbie programmerz Nov 14 '18 at 20:20
  • https://github.com/matplotlib/matplotlib/issues/9578#issuecomment-339479995 – Jirka Jan 02 '19 at 21:56
30

I had the same problem but I fixed it.

Uninstall first

pip uninstall backports.functools_lru_cache

and then re-install it.

pip install backports.functools_lru_cache

Now I'm able to import matplotlib. Hope this helps.

Shree Ranga Raju
  • 591
  • 5
  • 11
20

Install arrow using:

pip install arrow==0.12.0 

fixed this issue for me

Aditya Jain
  • 201
  • 2
  • 2
  • Interesting... this just worked for me. It resulted in uninstalling `backports.functools-lru-cache-1.5` and then installing `backports.functools-lru-cache-1.2.1`. What's not obvious to me is why this fixes anything.. in an interactive session the import worked fine with version 1.5. – zgana Nov 20 '18 at 17:39
  • Woo, magic! that works for me, with Python 2.7.16 and resulted in downgrade to *backports.functools_lru_cache==1.2.1* – Y00 Nov 03 '19 at 22:25
14

The pip command was actually the pip3, and the "ImportError" was happening when I used python (2.7).

pip2 uninstall backports.functools_lru_cache

then,

pip2 install backports.functools_lru_cache

fixed my problem.

enobufs
  • 860
  • 1
  • 7
  • 12
9

You have to check what is the import path of backports package:

import backports
print('Backports Path: {0}'.format(backports.__path__))

1. The import path is the main python path ( the case of Matimath's question)

pip uninstall backports.functools_lru_cache   (this will uninstall it from /usr/local/)
pip install backports.functools_lru_cache

2. The import path is the local usr dir (~/.local/, or %APPDATA%\Python for windows)

pip uninstall backports.functools_lru_cache 
pip install --user backports.functools_lru_cache

Use pip2 command for python2.

The reason for this inconsistency is that the import path of backports package might have been changed during another module/package installation (eg. from backports.configparser module) - see here for more details: https://bugs.python.org/issue31741

Charidimos
  • 588
  • 6
  • 7
7

Following from Aditya Jain's answer,

[python -m] pip uninstall backports.functools_lru_cache
[python -m] pip install backports.functools_lru_cache==1.2.1

which will avoid installing arrow merely to downgrade functools_lru_cache.

JDQ
  • 443
  • 7
  • 11
3

I had the same problem and my solution was;

HilmiK
  • 53
  • 10
2

I solved my problem by removing the excessive matplotlib packages. I found out that when importing matplotlib it was attempting to import backports.functools_lru_cache and there it was throwing the Importerror.

I realized that I had different matplotlib packages in many locations:

/usr/lib/python2.7/dist-packages/matplotlib/
/usr/lib/python2.7/site-packages/matplotlib/

I removed the site-packages one. I left the dist-packages one intact.

Then I ran the following commands in python:

matplotlib.get_configdir()
matplotlib.get_cachedir()

and I removed the matplotlib packages in the output paths of these commands.

Then I removed the matplotlib in my virtualenvironment:

mv /home/username/virtualenvironment/lib/python2.7/matplotlib* /tmp

Finally I removed the one in the .local folder:

mv /home/username/.local/lib/python2.7/matplotlib* /tmp

Now importing matplotlib works fine. So when I run in python:

matplotlib.__file__

it returns

'/usr/lib/python2.7/dist-packages/matplotlib/__init__.pyc'

Now it does not throw error anymore when import backports.functools_lru_cache

redsphinx
  • 91
  • 5
2

You are using pyhton 2. try to use pip2 instead:

  • pip2 uninstall matplotlib
  • sudo apt-get autoremove python-matplotlib
  • sudo apt-get install python-matplotlib
darrey
  • 51
  • 1
  • 6
2

If you're experiencing this issue on Ubuntu 18.x (and maybe other versions): it is caused by this Ubuntu bug. The problem is in the Ubuntu package python-configparser which is installed as a dependence of python-pip. It contains empty __init__ file

/usr/lib/python2.7/dist-packages/backports/__init__.py

Hence, pip modules installed to /usr/local/lib/python2.7/dist-packages/backports are simply ignored. As soon as this bug is not fixed yet, the easiest way to fix this is to remove this package:

sudo apt remove python-configparser

It does not any harm to any of your backports modules installed by pip (since they are in another folder), and this is much safer than version downgrade.

See also this pip issue with similar problem around backports module.

vdmit
  • 45
  • 5
1

I had same issue, re-installation of backports.functools_lru_cache resolved the issue

1

Also meet this issue on Ubuntu 16. Uninstall & reinstall not work for me.

My solution is reinstall from apt.

pip uninstall matplotlib
sudo apt-get autoremove python-matplotlib
sudo apt-get install python-matplotlib
Hossein Golshani
  • 1,847
  • 5
  • 16
  • 27
FAN
  • 189
  • 1
  • 7
1

This worked for me. Ubuntu 18.04.

sudo pip2 uninstall backports.functools-lru-cache
sudo apt install python-backports.functools-lru-cache
Akshay Suresh
  • 373
  • 1
  • 3
  • 9
0

this worked for me

from backports.functools_lru_cache import lru_cache
Aze
  • 119
  • 1
  • 3
  • This is giving following error on Ubuntu 18: '''ImportError: No module named functools_lru_cache''' – sai Feb 23 '21 at 06:53