program story

OS X의 Matplotlib 문제 ( "ImportError : _thread 이름을 가져올 수 없음")

inputbox 2020. 10. 13. 07:45
반응형

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을 사용합니다).


이 문제는 최신 sixdateutil버전 에서 수정되었습니다 . 그러나 OS X에서는 six최신 버전으로 업데이트하더라도 실제로 올바르게 업데이트하지 못할 수 있습니다. 이것은 나에게 일어난 일입니다.

를 수행 한 후 pip2 install six -Usix모듈이 /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.pypython 2.7 six.py에서 python 3.4 (virtualenv)로 대체 합니다. 이후 2.7에서는 문제가 있지만 3.4에서는 문제가 없습니다.

최신 정보

파이썬을 재설치 한 후 (그리고 El Capitan으로 업그레이드 한 후) 동일한 문제가 다시 발생했습니다. 분명하지 않은 것은이 오류가 IPython쉘과 노트북 에서만 발생 import matplotlib.pyplot as plt하지만 (할 때 ) Python 쉘에서는 잘 작동한다는 것입니다.

따라서 더러운 해결 방법이없는 더 나은 솔루션 (내 경우에는 작동 함)은 sixipython. 이 문제를 해결하기 위해 수행 한 작업은 다음과 같습니다.

$ 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)

참고URL : https://stackoverflow.com/questions/27630114/matplotlib-issue-on-os-x-importerror-cannot-import-name-thread

반응형