ImportError:无法导入名称cbook

时间:2017-06-19 06:14:54

标签: python matplotlib

>>> import matplotlib
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py", line 123, in <module>
    from . import cbook
ImportError: cannot import name cbook

我没有找到解决方案,有人可以帮忙吗?

7 个答案:

答案 0 :(得分:17)

1。尝试更新matplotlib

python -m pip install -U matplotlib

2. 尝试重新安装matplotlib

python -m pip uninstall matplotlib
python -m pip install -U matplotlib

以下代码段打印到控制台是什么?

python -c "import matplotlib"

答案 1 :(得分:6)

由于依赖性差,我今天遇到了这个问题。

如果您同时拥有backports.shutil_get_terminal_size和。{ backports.functools_lru_cache已安装,您可以遇到此问题。

Matplotlib有一个简单的循环导入解决方法:

# cbook must import matplotlib only within function
# definitions, so it is safe to import from it here.
from . import cbook

直到PR #10483, matplotlib依赖于backports.functools_lru_cache

然而,ipython取决于backports.shutil_get_terminal_sizethat package doesn't set up a namespace package properly

如果您遇到此问题,您会看到以下症状:

>>> import backports
<module 'backports.shutil_get_terminal_size' from '/Users/whughes/miniconda2/envs/scratch/lib/python2.7/site-packages/backports/shutil_get_terminal_size/__init__.pyc'>
>>> >import backports.functools_lru_cache
ImportError: No module named functools_lru_cache

backports.shutil_get_terminal_size的问题在于它 没有定义命名空间包,所以它打破了任何其他包 backports.foo个套餐

重新安装matplotlib可以修复此问题,因为它会更改顺序 sys.path,先放backports.functools_lru_cache,然后再放{} package定义了一个合适的命名空间。

您还可以通过重新安装backports.shutil_get_terminal_size来解决此问题。

答案 2 :(得分:1)

我的经验是要注意matplotlib的版本。今天的最新版本是3.3,并存在此问题。因此,我指定了适用于我的先前版本:

pip install matplotlib==3.2.2

答案 3 :(得分:0)

我解决了卸载matplotpli并在没有 pip 的情况下重新安装的问题:

$ sudo apt-get install python-matplotlib

感谢this README.html

答案 4 :(得分:0)

仅分享我的经验,我试图使用matplotlib运行Python代码(2.7)。该代码在基于Debian 10映像的docker容器中运行。

最后,我根据这里的答案给出了解决方案,但是有一个小警告。我必须按照以下顺序进行操作:

  1. 安装其余要求
  2. 安装matplotlib(在我的情况下无需指定版本,pip已安装2.2.5)
  3. 安装箭头
  4. 卸载backports.functools_lru_cache
  5. 安装backports.functools_lru_cache版本1.2.1

dockerfile上的代码如下:

RUN pip2 install -r requirements.txt
RUN pip2 install matplotlib
RUN pip2 install arrow
RUN pip2 uninstall -y backports.functools_lru_cache
RUN pip2 install backports.functools_lru_cache==1.2.1

您可以在github上找到整个项目:https://github.com/n3if/irassh.git

答案 5 :(得分:0)

转到/usr/local/lib/python2.7/dist-packages/matplotlib 并删除__init__.py 如果这些文件不止一个,请删除所有文件...它会起作用。 为了您的信心,请先将它们保存在其他地方:) 看到你的错误信息,显示目录,文件是写在那里的init构造函数

答案 6 :(得分:-1)

工作...

pip install --user matplotlib==2.0.2