satokenの備忘録

海無し県民の行動記録です

【Python】MySQLdbモジュールの導入

最近はSlackからデータベースを色々操作している.
普段はSQLiteを利用しているが,phpmyadminで管理するほうが見やすいだろうということで,MySQLと連携させてみることにした.

$ sudo pip install MySQLdb

は普通に通ったのだが,いざPythonのコードを実行しようとすると以下のエラーが出る.シンボリックリンクが貼られていないっぽい.

ImportError: dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.11-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib


そこで,

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

と実行してみたのだが,下のエラーが出る.

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

なんだこれは.
OSがEl Capitanになってると出るらしい.root権限を持つユーザでもusrなどのフォルダにはアクセス制限がかかるとかなんとか.


一旦リカバリーモードで入って制限を解除する必要があるので上のメニューからMacを再起動.
⌘+Rを押したままにして,画面にAppleのロゴが表示されたら離す.
リカバリーモードに入ったら,上部メニューのユーティリティからTerminalを選択する.ぼくは普段の設定で黒背景にしてるのですがこの時は白でした.

$ csrutil disable

を実行すると,以下のようなメッセージが出る.

Successfully disabled System Integrity Protection. 
Please restart the machine for the changes to take effect.

きた.成功したっぽいので再起動.



Terminalを起動して,

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

を再度実行.パスワードを求められるので入力.

$ python -c "import MySQLdb"

と実行しても,何もエラーが吐かれていないことがわかる.