ImportError: невозможно импортировать имя cbook
>>> 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
Я не нашел решения, может ли кто-нибудь помочь?
Ответы
Ответ 1
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"
Ответ 2
Я столкнулся с этой проблемой сегодня из-за плохой зависимости.
Если у вас есть 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_size
, и
этот пакет не устанавливает пакет пространства имен
правильно.
Если у вас возникла эта проблема, вы увидите следующие симптомы:
>>> 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
на первое место, и это
Пакет определяет правильное пространство имен.
Вы также можете это исправить, переустановив backports.shutil_get_terminal_size
.