Python 2.7中functools_lru_cache已安装但无法导入

35

当我尝试导入 matplotlib 时出现错误

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本身可以正确导入。当我尝试手动安装functools时,会出现以下错误:

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

sudo pip install backports.functools_lru_cache

我得到了信息

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

但是当我尝试时

import backports.functools_lru_cache

我收到的信息是

ImportError: No module named functools_lru_cache

系统信息 Ubuntu 16 Python 2.7.12 Pip 9.0.1

14个回答

40

如果某人仍然遇到该问题并且在他的情况下重新安装backports.functools_lru_cache无效,就像我遇到的那样,那么可能安装较旧版本的matplotlib会起作用。例如:

pip install matplotlib==2.0.2

出现了问题,版本号为2.2.0,我切换到2.0.2版本,现在可以使用。我没有检查其他版本。


3
更新Ubuntu到18.04后,我遇到了同样的问题。这个答案解决了我的问题。注意:在此之前我还需要通过pip卸载matplotlib:pip uninstall matplotlib - ala
1
没有任何理由降级matplotlib。如果有人认为matplotlib存在问题,最好通知开发人员。然而,从这里的其他答案来看,通过正确设置安装matplotlib的环境,应该可以解决这个问题。 - ImportanceOfBeingErnest
1
这个工作像魔法一样。它还解决了“cbook”神秘的导入错误问题(https://dev59.com/rFcP5IYBdhLWcg3wRoII)。 - Shaohua Li
这个方法可行!非常感谢!我已经试图解决这个问题超过一个小时了。重新安装了Python,还在lib/site-packages文件夹中搞了一些文件。 - newbie programmerz
https://github.com/matplotlib/matplotlib/issues/9578#issuecomment-339479995 - Jirka

30

我曾经遇到过同样的问题,但是我解决了它。

首先卸载程序。

pip uninstall backports.functools_lru_cache

然后重新安装它。

pip install backports.functools_lru_cache

现在我能够导入matplotlib。希望这有所帮助。


3
我遇到了同样的问题。卸载/安装backports.functools_lru_cache并没有起作用。我使用的是Ubuntu 16.04,Python 2.7,pip 9.0.1。 - enobufs
我正在使用Ubuntu 14.04,Python 2.7.14和pip 9.0.1。这对我有效。 - Shree Ranga Raju
@enobufs 你成功解决了这个问题吗?我也遇到了同样的情况。 - saha rudra
@enobufs 我确实尝试过,但没有用。我卸载了matplotlib,甚至卸载了Python2.7,从头开始,但还是没有用。 - saha rudra
对于Python2.7来说这并没有帮助,尝试使用from backports.functools_lru_cache import lru_cache - Jirka
显示剩余2条评论

20

使用以下命令安装Arrow:

pip install arrow==0.12.0 

这个问题对我来说已经解决了


有趣...这对我起作用了。它卸载了backports.functools-lru-cache-1.5,然后安装了backports.functools-lru-cache-1.2.1。对我来说不明显的是为什么这会修复任何东西...在交互式会话中,使用版本1.5时导入工作正常。 - zgana
哇,太神奇了!这对我来说可行,使用Python 2.7.16并导致降级到backports.functools_lru_cache==1.2.1 - Y00

14

pip命令实际上是pip3,而当我使用Python(2.7)时出现了"ImportError"。

pip2 uninstall backports.functools_lru_cache

那么,

pip2 install backports.functools_lru_cache

问题已经得到解决。


这对我有用,也许pip变成pip3是一个新的事情。 - ijuneja

9

您需要检查backports软件包的导入路径:

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

1. 导入路径为主要的Python路径(Matimath问题的情况)

pip uninstall backports.functools_lru_cache  (这将从 /usr/local/ 卸载它)
pip install backports.functools_lru_cache

2. 导入路径为本地usr目录(~/.local/,或者对于Windows是 %APPDATA%\Python)

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

对于Python2,请使用 pip2 命令。

导致这种不一致性的原因是backports包的导入路径可能在另一个模块/包安装期间发生了更改(例如从backports.configparser模块中)- 在此处查看更多详细信息: https://bugs.python.org/issue31741


"--user" 参数在虚拟环境中正是所需。 - xiawi

7

Aditya Jain的答案之后,

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

这将避免仅为了降级functools_lru_cache而安装arrow


3

2

我通过移除过多的matplotlib包来解决了我的问题。我发现当导入matplotlib时,它会尝试导入backports.functools_lru_cache,并在那里抛出Importerror。

我意识到在许多位置中我有不同的matplotlib包:

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

我删除了site-packages文件夹,但保留了dist-packages文件夹。

然后我在Python中运行了以下命令:

matplotlib.get_configdir()
matplotlib.get_cachedir()

我在这些命令的输出路径中删除了matplotlib包。

然后我在我的虚拟环境中删除了matplotlib:

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

最终我删除了.local文件夹中的一个:

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

现在导入matplotlib正常运行。因此,当我在Python中运行时:
matplotlib.__file__

它返回

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

现在当使用import backports.functools_lru_cache时不再抛出错误了。

2

您正在使用Python 2,尝试使用pip2:

  • pip2卸载matplotlib
  • sudo apt-get autoremove python-matplotlib
  • sudo apt-get install python-matplotlib

"Original Answer"翻译成"最初的回答"


2
如果您在Ubuntu 18.x(和可能其他版本)上遇到此问题:这是由于这个Ubuntu bug引起的。问题出现在Ubuntu包python-configparser中,它作为python-pip的依赖项被安装。它包含一个空的__init__文件。 /usr/lib/python2.7/dist-packages/backports/__init__.py 因此,安装到/usr/local/lib/python2.7/dist-packages/backports的pip模块会被简单地忽略。由于此错误尚未修复,最简单的解决方法是删除此软件包:
sudo apt remove python-configparser

对于由pip安装的任何backports模块,它不会造成任何损害(因为它们在另一个文件夹中),这比版本降级更加安全。

请参考此pip问题,该问题与backports模块类似。


1
这个方法解决了我树莓派上相同的问题。 - jsolum
它也解决了我在树莓派上的问题,当我尝试使用CSS选择器玩BeautifulSoup4时。 - amiltonjr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接