OS X上的Matplotlib问题(“importTerror:无法导入name_thread”)

2024-04-29 05:03:52 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去几天的某个时候,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更新,也许是我在/usr/local中做了一些权限更改,以使Brew重新工作。

我试图通过Pip重新安装Matplotlib和Python dateutil,但这没有帮助。也尝试了重新启动。我正在运行Python 2.7.6,它位于/usr/bin/Python中。我在经营优胜美地(OSX10.10.1)。


Tags: infrompyimportmatplotlibpackageslinelibrary
3条回答

安装python-dateutil==2.2对我不起作用。

但是一个快速而肮脏的解决办法确实奏效了!我将python 2.7中的six.py替换为python 3.4中的six.py(virtualenv)。因为,我有2.7的问题,但不是3.4。

更新

在重新安装python之后(升级到El Capitan之后),我又遇到了同样的问题。不明显的是,这个错误只发生在IPythonshell和笔记本中(当我这样做时,import matplotlib.pyplot as plt),但在Python shell中运行良好。

因此,一个更好的解决方案(在我的例子中是有效的)是强制同时安装sixipython。我是这么做的:

$ pip install --ignore-installed six
$ pip install --ignore-installed ipython

这个问题在最新的sixdateutil版本中已修复。但是,在OSX中,即使将six更新到最新版本,也可能无法正确更新。这就是发生在我身上的事:

在完成pip2 install six -U之后,新的six模块被安装在/Library/Python/2.7/site-packages/中。然而,当我在Python2.7终端中加载six并检查其路径时,得到的是:

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.*

这帮我解决了这个问题。

sudo pip uninstall python-dateutil
sudo pip install python-dateutil==2.2

今天下午我也收到了同样的错误消息,尽管我最近升级到了Yosemite。我不完全清楚为什么将dateutil还原为以前的版本对我有效,但是自从运行上面的版本之后,我没有遇到任何问题(我通常在ipython笔记本中内联使用pyplot)。

相关问题 更多 >