Anaconda Python 3 matplotlib 충돌 해결

By | 2016/07/04

현재 쓰고 있는 맥북에 Python 3를 위해서 anaconda를 설치해서 쓰고 있습니다. 대체로 문제없이 쓰고 있었는데 matplotlib으로 그래프를 그리려고 하니 아래와 같이 에러가 납니다.

 

objc[8269]: Class TKApplication is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /Users/NoSyu/anaconda/envs/python3/lib/libtk8.5.dylib. One of the two will be used. Which one is undefined.
objc[8269]: Class TKMenu is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /Users/NoSyu/anaconda/envs/python3/lib/libtk8.5.dylib. One of the two will be used. Which one is undefined.
objc[8269]: Class TKContentView is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /Users/NoSyu/anaconda/envs/python3/lib/libtk8.5.dylib. One of the two will be used. Which one is undefined.
objc[8269]: Class TKWindow is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /Users/NoSyu/anaconda/envs/python3/lib/libtk8.5.dylib. One of the two will be used. Which one is undefined.
Exception in Tkinter callback
Traceback (most recent call last):
  File “/Users/NoSyu/anaconda/envs/python3/lib/python3.5/site-packages/matplotlib/backends/tkagg.py”, line 22, in blit
    id(data), colormode, id(bbox_array))
_tkinter.TclError: invalid command name “PyAggImagePhoto”

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File “/Users/NoSyu/anaconda/envs/python3/lib/python3.5/tkinter/__init__.py”, line 1549, in __call__
    return self.func(*args)
  File “/Users/NoSyu/anaconda/envs/python3/lib/python3.5/site-packages/matplotlib/backends/backend_tkagg.py”, line 283, in resize
    self.show()
  File “/Users/NoSyu/anaconda/envs/python3/lib/python3.5/site-packages/matplotlib/backends/backend_tkagg.py”, line 355, in draw
    tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2)
  File “/Users/NoSyu/anaconda/envs/python3/lib/python3.5/site-packages/matplotlib/backends/tkagg.py”, line 30, in blit
    id(data), colormode, id(bbox_array))
_tkinter.TclError
alloc: invalid block: 0x1004d8590: 0 0

Process finished with exit code 134

이런 에러를 해결하고자 검색을 하였는데 그러다 하나가 저에겐 맞았습니다. 그래서 이를 기록으로 남깁니다.

 

먼저, 어떤 것들이 설치되어 있는지 확인합니다.

python -c “import matplotlib; print(matplotlib.rcsetup.all_backends)”

그러면 리스트 하나가 출력됩니다.

[‘GTK’, ‘GTKAgg’, ‘GTKCairo’, ‘MacOSX’, ‘Qt4Agg’, ‘Qt5Agg’, ‘TkAgg’, ‘WX’, ‘WXAgg’, ‘CocoaAgg’, ‘GTK3Cairo’, ‘GTK3Agg’, ‘WebAgg’, ‘nbAgg’, ‘agg’, ‘cairo’, ’emf’, ‘gdk’, ‘pdf’, ‘pgf’, ‘ps’, ‘svg’, ‘template’]

이 중에 전 Qt4Agg가 있음을 확인하였습니다. 이후 유저 디렉터리의 .matplotlib 폴더 내 matplotlibrc 파일을 아래와 같이 수정하였습니다.

기존 파일 내 내용

backend: TkAgg

새롭게 변경하는 파일 내 내용

backend: Qt4Agg

 

이렇게 하여서 그래프를 그려보니 잘 나오는 것을 확인하였습니다.

Screen Shot 2016-07-04 at 16.52.30

위의 그래프를 그리는 소스 파일은 밑에 참조에 있습니다.

 

이것 때문에 하루 종일 고생했는데 깔끔하게 해결하였네요. 다른 분들에게 도움이 되기를 바라며 글을 적습니다.

 

참조

Leave a Reply