Irgendwann in den letzten Tagen hat Matplotlib unter OS X aufgehört, für mich zu arbeiten. Hier ist der Fehler, den ich bekomme, wenn ich versuche 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
Die einzige Systemänderung, an die ich denken kann, war das von Apple erzwungene NTP-Update und möglicherweise einige Berechtigungsänderungen, die ich in / usr / local vorgenommen habe, um Brew wieder zum Laufen zu bringen.
Ich habe versucht, Matplotlib und Python-dateutil über Pip neu zu installieren, aber das hat nicht geholfen. Habe auch einen Neustart versucht. Ich verwende Python 2.7.6, das sich in / usr / bin / python befindet. Ich verwende Yosemite (OS X 10.10.1).
quelle
six
würde auch funktionieren.Dieses Problem wird in den neuesten festen
six
unddateutil
Versionen. Selbst wenn Sie in OS X Ihresix
Version auf die neueste Version aktualisieren, wird sie möglicherweise nicht richtig aktualisiert. Das ist mir passiert:Nach a
pip2 install six -U
wurde das neuesix
Modul in installiert/Library/Python/2.7/site-packages/
. Als ich jedochsix
ein Python 2.7-Terminal geladen und dessen Pfad überprüft habe, habe ich Folgendes erhalten:import six print six.__file__ /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.pyc
Python verwendete also eine alte Version von
six
, die ich durch Eingabe von:rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.*
Dies hat dieses Problem für mich behoben.
quelle
Die Installation von
python-dateutil==2.2
hat bei mir nicht funktioniert.Aber eine schnelle und schmutzige Problemumgehung hat funktioniert! Ich ersetze
six.py
in Python 2.7 durch dassix.py
von Python 3.4 (virtualenv). Da habe ich das Problem in 2.7 aber nicht in 3.4.AKTUALISIEREN
Ich hatte das gleiche Problem erneut nach der Neuinstallation von Python (und nach dem Upgrade auf El Capitan). Es ist nicht offensichtlich, dass dieser Fehler nur in der
IPython
Shell und im Notebook auftritt (wenn ich das tueimport matplotlib.pyplot as plt
), aber in einer Python-Shell einwandfrei funktioniert.Eine bessere Lösung (die in meinem Fall funktioniert hat) ohne eine schmutzige Umgehung besteht darin, die Installation von
six
und zu erzwingenipython
. Folgendes habe ich getan, um dieses Problem zu beheben:quelle
Es ist möglich, dass Sie eine perfekt installierte Version aller von Ihnen installierten Pakete haben, aber die standardmäßig verwendete Version ist nicht die gewünschte. Sie können die Liste der Pfade sehen, über die Python sucht, um seine Pakete wie folgt zu finden:
>>> import sys >>> sys.path
Damit Python zuerst die aktuellste Version eines bestimmten Pakets durchsuchen kann, anstatt die Systemversion zu entfernen, können Sie die Systemvariable
PYTHONPATH
in der Konfigurationsdatei ~ / .bash_profile (oder ~ / .bashrc, wenn Linux) auf setzen Der Pfad, in dem die neuen Pakete installiert werden:export PYTHONPATH=/Library/Python/2.7/site-packages
Eine Alternative besteht darin, den Python-Pfad in Ihrem Python-Skript zu ändern, indem Sie den Pfad am Anfang der Pfadliste hinzufügen:
import sys sys.path.insert(1,'/Library/Python/2.7/site-packages')
Dies muss für jedes Skript durchgeführt werden, für das Sie eine bestimmte Paketversion benötigen. Möglicherweise möchten Sie aus irgendeinem Grund eine ältere Version verwenden, die Sie installiert haben. Übrigens gehen alle meine Installationen mit easy_install oder pip oder aus Quellen zu /Library/Python/2.7/site-packages. Dies funktionierte in EL Capitan und jetzt auch in macOS Sierra (10.12.2).
quelle