Проблема Matplotlib в OS X ("ImportError: не удается импортировать поток имен")
в какой-то момент в последние несколько дней Matplotlib перестал работать для меня на OS X. Вот ошибка, которую я получаю при попытке import matplotlib
:
Traceback (most recent call last):
File "/my/path/to/script/my_script.py", line 15, in <module>
import matplotlib.pyplot as plt
File "/Library/Python/2.7/site-packages/matplotlib/pyplot.py", line 34, in <module>
from matplotlib.figure import Figure, figaspect
File "/Library/Python/2.7/site-packages/matplotlib/figure.py", line 40, in <module>
from matplotlib.axes import Axes, SubplotBase, subplot_class_factory
File "/Library/Python/2.7/site-packages/matplotlib/axes/__init__.py", line 4, in <module>
from ._subplots import *
File "/Library/Python/2.7/site-packages/matplotlib/axes/_subplots.py", line 10, in <module>
from matplotlib.axes._axes import Axes
File "/Library/Python/2.7/site-packages/matplotlib/axes/_axes.py", line 22, in <module>
import matplotlib.dates as _ # <-registers a date unit converter
File "/Library/Python/2.7/site-packages/matplotlib/dates.py", line 126, in <module>
from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, SU, YEARLY,
File "/Library/Python/2.7/site-packages/dateutil/rrule.py", line 14, in <module>
from six.moves import _thread
ImportError: cannot import name _thread
единственное изменение системы, о котором я могу думать,-это обновление NTP от Apple и, возможно, некоторые изменения разрешений, которые я сделал в /usr/local, чтобы заставить Brew снова работать.
Я попытался переустановить как Matplotlib, так и Python-dateutil через Pip, но это не помогло. Также попробовал перезагрузку. Я запускаю Python 2.7.6, который находится в /usr/bin / python. Я запускаю Yosemite (OS X 10.10.1).
4 ответа:
sudo pip uninstall python-dateutil sudo pip install python-dateutil==2.2
У меня было такое же сообщение об ошибке сегодня днем, хотя я недавно обновился до Yosemite. Я не совсем уверен, что понимаю, почему возврат dateutil к предыдущей версии работает для меня, но с момента запуска выше у меня нет проблем (я обычно использую pyplot inline в ноутбуке ipython).
эта проблема исправлена в последней
six
иdateutil
версий. Однако в OS X, даже если вы обновите свойsix
до последней версии, вы не можете на самом деле обновить его правильно. Вот что случилось со мной:после этого
pip2 install six -U
новаяsix
модуль был установлен в/Library/Python/2.7/site-packages/
. Однако, когда я загрузилsix
в терминале python 2.7 и проверил его путь, вот что я получил:import six print six.__file__ /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.pyc
Итак, python использовал старую версию
six
, который я удалил, набрав:rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.*
это исправила эту проблему для меня.
установка
python-dateutil==2.2
не работает для меня.но быстрый и грязный обходной путь действительно работал! Я заменяю
six.py
в python 2.7 сsix.py
из python 3.4 (virtualenv). Так, у меня проблема в 2.7, но не 3.4.обновление
у меня была та же проблема снова после переустановки python (и после обновления до El Capitan). Неочевидно, что эта ошибка возникает только в
IPython
оболочка и ноутбук (когда я делаюimport matplotlib.pyplot as plt
) но отлично работает с оболочкой Python.поэтому лучшее решение (которое действительно работало в моем случае) без грязной работы-это принудительная установка обоих
six
иipython
. Вот что я сделал, чтобы это исправить:$ pip install --ignore-installed six $ pip install --ignore-installed ipython
возможно, что у вас есть идеально установленная версия всех установленных вами пакетов, но версия, используемая по умолчанию, не та, которую вы хотите. Вы можете увидеть список путей, которые python ищет, чтобы найти свои пакеты следующим образом:
>>> import sys >>> sys.path
для того, чтобы позволить питон поиск самых обновленные версии некоторых пакетов, вместо удаления предыдущей версии системы, что может быть сделано, чтобы установить системную переменную
PYTHONPATH
в ~/.файл (или ~/.bashrc если linux) файл конфигурации к пути, где установлены новые пакеты:export PYTHONPATH=/Library/Python/2.7/site-packages
альтернативой является изменение пути python внутри вашего скрипта python путем добавления пути в начале списка путей:
import sys sys.path.insert(1,'/Library/Python/2.7/site-packages')
это должно быть сделано для каждого сценария вам нужна определенная версия пакета. Вы можете по какой-то причине использовать более старую версию, которую вы установили. Кстати, все мои установки с easy_install, или pip, или из источников, перейти к / Библиотека / Python / 2.7 / site-packages Это работало en EL Capitan, а теперь и в macOS Sierra (10.12.2)