OS X의 Matplotlib 문제 ( "ImportError : _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 업데이트였으며 Brew가 다시 작동하도록하기 위해 / usr / local에서 수행 한 일부 권한 변경 일 수도 있습니다.
Pip을 통해 Matplotlib와 Python-dateutil을 모두 다시 설치하려고 시도했지만 도움이되지 않았습니다. 또한 재부팅을 시도했습니다. / usr / bin / python에있는 Python 2.7.6을 실행하고 있습니다. Yosemite (OS X 10.10.1)를 실행하고 있습니다.
sudo pip uninstall python-dateutil
sudo pip install python-dateutil==2.2
최근에 Yosemite로 업그레이드했지만 오늘 오후에도 동일한 오류 메시지가 표시되었습니다. dateutil을 이전 버전으로 되 돌리는 이유를 완전히 이해하지 못했지만 위의 내용을 실행하기 때문에 문제가 없습니다 (일반적으로 ipython 노트북에서 pyplot을 사용합니다).
이 문제는 최신 six
및 dateutil
버전 에서 수정되었습니다 . 그러나 OS X에서는 six
최신 버전으로 업데이트하더라도 실제로 올바르게 업데이트하지 못할 수 있습니다. 이것은 나에게 일어난 일입니다.
를 수행 한 후 pip2 install six -U
새 six
모듈이 /Library/Python/2.7/site-packages/
. 그러나 six
파이썬 2.7 터미널에 로드 하고 경로를 확인 했을 때 다음 과 같은 결과를 얻었습니다.
import six
print six.__file__
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six.pyc
그래서 파이썬은 이전 버전의을 사용하고 있었으며 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에서는 문제가 없습니다.
최신 정보
파이썬을 재설치 한 후 (그리고 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
~ / .bash_profile (또는 Linux의 경우 ~ / .bashrc) 구성 파일 의 시스템 변수를 다음과 같이 설정하면 됩니다. 새 패키지가 설치된 경로 :
export PYTHONPATH=/Library/Python/2.7/site-packages
대안은 경로 목록의 시작 부분에 경로를 추가하여 Python 스크립트 내에서 Python 경로를 수정하는 것입니다.
import sys
sys.path.insert(1,'/Library/Python/2.7/site-packages')
This needs to be done for every script you need a certain package version. You might want for some reason use an older version that you have installed. BTW all my installations with easy_install, or pip, or from sources go to /Library/Python/2.7/site-packages This worked en EL Capitan, and now also in macOS Sierra (10.12.2)
'program story' 카테고리의 다른 글
uint 대 int 사용 (0) | 2020.10.14 |
---|---|
세트 복사 Java (0) | 2020.10.14 |
비활성화 된 입력 텍스트 색상 (0) | 2020.10.13 |
레코드가 레일에서 방금 파괴되었는지 확인 (0) | 2020.10.13 |
Oracle Database 11g에서 새 스키마 / 새 사용자를 생성하는 방법은 무엇입니까? (0) | 2020.10.13 |