", line 1, in File "/usr/local/lib/python2.7/d" /> ", line 1, in File "/usr/local/lib/python2.7/d" /> ", line 1, in File "/usr/local/lib/python2.7/d"/>

python 2.7 functools_lru_cache does not import although installed

40.4k Views Asked by At

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

14

There are 14 best solutions below

7
Shree Ranga Raju On

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.

1
enobufs On

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.

0
HilmiK On

I had the same problem and my solution was;

0
redsphinx On

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

5
Skoskm On

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.

1
Aze On

this worked for me

from backports.functools_lru_cache import lru_cache
1
Charidimos On

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

1
Ragesh Moorkoth On

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

2
Aditya Jain On

Install arrow using:

pip install arrow==0.12.0 

fixed this issue for me

0
FAN On

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
0
darrey On

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
0
JDQ On

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.

0
Akshay Suresh On

This worked for me. Ubuntu 18.04.

sudo pip2 uninstall backports.functools-lru-cache
sudo apt install python-backports.functools-lru-cache
2
vdmit On

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.