![](/img/trans.png)
[英]pandas ImportError: cannot import name hashtable on Mac OS X
[英]Matplotlib issue on OS X (“ImportError: cannot import name _thread”)
在最近幾天的某個時候,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
我能想到的唯一的系統更改是Apple強制的NTP更新,也許我在/ usr / local中進行了一些權限更改,以使Brew重新工作。
我嘗試通過Pip重新安裝Matplotlib和Python-dateutil,但這沒有幫助。 還嘗試了重啟。 我正在運行/ usr / bin / python中的Python 2.7.6。 我正在運行優勝美地(OS X 10.10.1)。
sudo pip uninstall python-dateutil
sudo pip install python-dateutil==2.2
盡管我最近升級到優勝美地,但今天下午我也收到了同樣的錯誤消息。 我不太確定我是否理解為什么將dateutil還原到以前的版本對我有用,但是由於運行上述命令,我沒有遇到任何麻煩(我通常在ipython筆記本中使用pyplot inline)。
最新的six
和dateutil
版本中已解決此問題。 但是,在OS X中,即使將six
更新為最新版本,也可能實際上未正確更新。 這就是我發生的事情:
在完成pip2 install six -U
,新的six
模塊已安裝在/Library/Python/2.7/site-packages/
。 但是,當我在python 2.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.*
這為我解決了這個問題。
安裝python-dateutil==2.2
對我不起作用。
但是,一種快速而又骯臟的解決方法確實有效! 我更換six.py
在Python 2.7與six.py
蟒蛇3.4(virtualenv中)。 從那以后,我在2.7中遇到了問題,但沒有3.4。
更新
重新安裝python之后(升級到El Capitan之后),我又遇到了同樣的問題。 不明顯的是,此錯誤僅在IPython
Shell和筆記本中發生(當我import matplotlib.pyplot as plt
),但在Python Shell中可以正常工作。
因此,一個更好的解決方案(在我的情況下確實有效)且沒有不可行的解決方法是強制同時安裝six
和ipython
。 這是我修復此問題的方法:
$ pip install --ignore-installed six
$ pip install --ignore-installed ipython
您可能已經完美安裝了所有已安裝軟件包的版本,但是默認情況下使用的不是您想要的版本。 您可以查看python搜索的路徑列表,以查找其包,如下所示:
>>> import sys
>>> sys.path
為了讓python首先搜索某些軟件包的最新版本,而不是刪除系統版本,可以做的是在〜/ .bash_profile(如果是linux,則為〜/ .bashrc)配置文件中設置系統變量PYTHONPATH
。到安裝新軟件包的路徑:
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進行的所有安裝,或從源代碼進行的安裝,都轉到/Library/Python/2.7/site-packages。此方法在EL Capitan上有效,現在在macOS Sierra(10.12.2)中也有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.