matplotlibが動かなくなった話(soxインストールのせい?)
こんばんは.1000chです. 皆さん3連休いかがお過ごしでしたか? 自分は「部屋の片付けをして快適な開発ライフを!」という目標を掲げ, 積み重なった漫画を整理していたら連休が終わっていました. そして気づいたら体調を崩し、今日は一日家で開発もとい安静にしています.
悪いことは続くもので,前回以降久しぶりにサウンド処理のプログラムを動かそうとするもなぜかエラー頻出で動かなくなりました. どうやら原因はmatplotlibにあるようですが,果たして何が起きたのでしょうか...
ということで今回は,動かなくなったmatplotlibとの戦いの様子をメモしておきます. あらかじめ言っておきますがいつになく地味です.
症状
前回以降はじめて,matplotlibを含むプログラムを走らせました.すると.
(py3)1000ch% tempo_analysis.py Traceback (most recent call last): File "tempo_analysis.py", line 7, in <module> import matplotlib.pyplot as plt File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/pyplot.py", line 24, in <module> import matplotlib.colorbar File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/colorbar.py", line 29, in <module> import matplotlib.collections as collections File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/collections.py", line 23, in <module> import matplotlib.backend_bases as backend_bases File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/backend_bases.py", line 50, in <module> import matplotlib.textpath as textpath File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/textpath.py", line 11, in <module> import matplotlib.font_manager as font_manager File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/font_manager.py", line 53, in <module> from matplotlib import ft2font ImportError: dlopen(/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/ft2font.so, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib Referenced from: /usr/local/lib/libfreetype.6.dylib Reason: image not found
なにやらごにょごにょ出ています. 尚断言しますがプログラムは変更していません!
前回スペクトログラムを出してから行った変更と言えばsoxをbrew経由でDLした事くらいです. がまぁ,おそらくmatplotlib周りの環境が少しぶっ壊れたという事でしょう.
今回はこれを修正してきちんとグラフ表示させるところまでもっていきます.
ぐぐってみる
とりあえずエラーメッセージでググってみました.
で 出てきたのはこんな感じ.
Import error on OS X: Reason: image not found
なかなか近そうです.
要旨としてはlibfreetypeのdllが無いよ!ってエラーに対しその辺にある他のやつコピペすれば?というよう感じでしょうか.
自分の場合,
ImportError: dlopen(/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/ft2font.so, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib Referenced from: /usr/local/lib/libfreetype.6.dylib Reason: image not found
とのことなので,libfreetypeのdylibは見つかっている様子.
悪いのは/user/local/lib以下にlibpng15.15.dylibが居ないことのようです.
libbpngを探す
じゃーそんなんほんとにいるの?ってことでfindしてみます.
find ~/ -name "libpng15.15.dylib" (py3)1000ch% find / -name "libpng15.15.dylib" find: /.DocumentRevisions-V100: Permission denied find: /.fseventsd: Permission denied find: /.Spotlight-V100: Permission denied find: /.Trashes: Permission denied find: /Applications/BookletCreator.app: Permission denied /Applications/Pd-extended.app/Contents/lib/libpng15.15.dylib /Applications/SuperCollider/SuperCollider.app/Contents/MacOS/libpng15.15.dylib /Applications/TeX/TeXworks.app/Contents/MacOS/libpng15.15.dylib #略
どうも様々なアプリケーションの中にいるみたいですね. じゃーこれをコピペすればいいんかな?
ということでTeXworks内のdylibをcpしてみると...
(py3)1000ch% tempo_analysis.py Traceback (most recent call last): File "tempo_analysis.py", line 7, in <module> import matplotlib.pyplot as plt File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/pyplot.py", line 24, in <module> import matplotlib.colorbar File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/colorbar.py", line 29, in <module> import matplotlib.collections as collections File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/collections.py", line 23, in <module> import matplotlib.backend_bases as backend_bases File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/backend_bases.py", line 50, in <module> import matplotlib.textpath as textpath File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/textpath.py", line 11, in <module> import matplotlib.font_manager as font_manager File "/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/font_manager.py", line 53, in <module> from matplotlib import ft2font ImportError: dlopen(/Users/1000ch/.virtualenvs/py3/lib/python3.3/site-packages/matplotlib/ft2font.so, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib Referenced from: /usr/local/lib/libfreetype.6.dylib Reason: Incompatible library version: libfreetype.6.dylib requires version 33.0.0 or later, but libpng15.15.dylib provides version 31.0.0
だめかー(´・ω・`) 微妙にエラーメッセージ変わってるけど..
15.15.dylibはlibfreetypeのver33に対応していない?どういうことだってばよ? 今まで15.15.dylibで動いてたのでは?
/usr/local/libの中身をみてみる
本当に/usr/local/lib以下からlibpngは消えたのか?ということで,そちらをlsしてみます.
(py3)1000ch% ls /usr/local/lib/libpng* /usr/local/lib/libpng.a /usr/local/lib/libpng15.15.dylib /usr/local/lib/libpng16.a /usr/local/lib/libpng.dylib /usr/local/lib/libpng16.16.dylib /usr/local/lib/libpng16.dylib
ここにある15のdylibは先程cpしたやつです.
どうやら,何らかの原因でlibpngが16にバージョンアップし,libfreetypeで参照しているバージョンと差が発生していることがエラーの原因っぽい気がしてきました.
改めてlibpngを探す
先程はとりあえず見つかったlibpngをcpしましたが,あらためて別のlibpngを探してみます.
1000ch% sudo find / -name libpng15.15.dylib Password: /Applications/Pd-extended.app/Contents/lib/libpng15.15.dylib /Applications/SuperCollider/SuperCollider.app/Contents/MacOS/libpng15.15.dylib /Applications/TeX/TeXworks.app/Contents/MacOS/libpng15.15.dylib find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory /opt/X11/lib/libpng15.15.dylib /usr/local/Cellar/libpng/1.5.13/lib/libpng15.15.dylib /usr/local/Cellar/libpng/1.5.14/lib/libpng15.15.dylib /usr/local/Cellar/libpng/1.5.17/lib/libpng15.15.dylib /usr/local/Cellar/libpng/1.5.18/lib/libpng15.15.dylib /usr/local/lib/libpng15.15.dylib
あ!Celler/libpng以下にバージョン違いのlibpng15.15.dylibが存在します!(ややこしい
15.15の中でも最新っぽい1.5.18以下のlibpngを使えばあるいは?
ということでlnします(libpng16系が全てシンボリックリンクになっていたのでcpやめました
# /usr/local/lib にいます 1000ch% ln -s /usr/local/Cellar/libpng/1.5.18/lib/libpng15.15.dylib ./
動いた!!!
というわけで,無事matplotlibが動くようになりました! これでレポートかけるよ!
しかし...
グラフの表示はできるのですが,グラフの保存ボタンを押すとプログラムが落ちる現象に見舞われています...
最悪スクショで何とかなるのでとりあえず放置していますが,解決策があれば直したいところです.