旧それなりブログの跡地、画像やスタイルやJSなどが壊れてることがあります。

[Python] MySQLdb で ImportError が出た

2008年8月21日

PythonでMySQLと接続しようと

>>> import MySQLdb

とやったら、以下のようなエラーが出た

Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/local/python-2.4.5/lib/python2.4/site-packages/MySQL_python-1.2.2-py2.4-linux-i686.egg/MySQLdb/__init__.py"
, line 19, in ?
import _mysql
ImportError: libmysqlclient_r.so.15: cannot open shared object file: No such file or directory

つまりは、libmysqlclient_r.so.15 が無い、もしくはパスが通ってない、と。

まず、存否確認をすると
/usr/local/mysql/lib/mysql/libmysqlclient_r.so.15 下にあり、
ネットの記事と照合すると多分ここで合っている。

ので、パスが通ってないのが原因っぽい。

そういや思い当たる点があって、
Pythonインストール時もMySQL-pythonインストール時も
MySQLのパスを指定していなかった。

ほぼこれで間違いなかろう、スロー過ぎてアクビがでるぜっ!
・・・と、思ってたら、一向にそのオプションが見つからない。

なんでだあああっ!

結局、soundkitchen氏に聞いて
ライブラリへのパスが通ってないのが原因だとわかったので、
/etc/ld.so.conf.d/mysql.conf に /usr/local/mysql/lib/mysql を書いて
ldconfigで再起動したら動くようになりました。
毎度、ご迷惑をお掛けします。

【勉強になったこと/反省点】

  • Python側で取得するMySQLのパスは、インストール時のMySQLdbインストール時に$PATHを見るらしい(未検証)。
    PHPは本体インスコ時に指定するし、RubyもMySQLドライバインストール時に指定するから、
    そういう風にやるもんだと思い込んでいた・・・。
    なので、レンタルサーバとかで、
    最初から入っているような、使う予定の無いMySQLに優先してパスが通っている状態でPythonをインストールしちゃうと、
    そのまま全部ずれてしまうと思われる。
  • 「ライブラリのパスならldconfigを調べろ」を毎晩10回唱えること。

君達のような若者がインストールしなくてもいい・・
そんな世の中を築きたいものだな・・・