Mac で MySQLdb をインストールします。
import してみます
>>> import MySQLdb Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MySQLdb/__init__.py", line 19, in <module> import _mysql ImportError: dlopen(/some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-p y2.7-macosx-10.8-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18. dylib Referenced from: /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py 2.7-macosx-10.8-intel.egg/_mysql.so Reason: image not found >>>
_mysql.so にリンクされている libmysqlclient.18.dylib が見当たらない、と言われていますね。
まずは確認しましょう。
$ otool -L /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-maco sx-10.8-intel.egg/_mysql.so /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.8-int el.egg/_mysql.so: libmysqlclient.18.dylib (compatibility version 18.0.0, current version 1 8.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) $
リンク先の libmysqlclient.18.dylib のディレクトリ指定はありません。
このエラーについてググると、シンボリックリンクで解決、というページが沢山見つかります。 しかしその解決方法はなんだか Linux の .so の解決作法を OS X に持ってきただけみたいに見えます。
そこで今日のタイトルにある install_name_tool を使う解決方法を紹介しましょう。
今回使うのは -change というオプションです。
install_name_tool -change OLD NEW TARGET
と指定します。
TARGET の OLD というリンク先を NEW に書き換えます。
具体的に書くとこうなります。
$ install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysq lclient.18.dylib /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py2. 7-macosx-10.8-intel.egg/_mysql.so $
それでは確認しましょう。
$ otool -L /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-maco sx-10.8-intel.egg/_mysql.so /some/where/lib/python2.7/site-packages/MySQL_python-1.2.5-py2.7-macosx-10.8-int el.egg/_mysql.so: /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0 .0, current version 18.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0) $ python >>> import MySQLdb >>>
リンク先が書き換わって、python からの import も成功していますね。