Проблема 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)