1. ホーム
  2. python

[解決済み] Python mysqldb: ライブラリがロードされない: libmysqlclient.18.dylib

2022-05-04 19:12:59

質問

mysqldb for python 2.7をmac os 10.6でコンパイルしてインストールしたところです。私は、以下をインポートする簡単なテストファイルを作成しました。

import MySQLdb as mysql

まず、このコマンドには赤い下線が引かれ、infoには "未解決のimport"と表示されます。そこで、次のような簡単なpythonのコードを実行しようとしました。

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()

実行すると、次のようなエラーメッセージが表示されます。

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found

私の問題を解決する方法は何だろう?

EDIT 実は、このライブラリは/usr/local/mysql/libにあることがわかりました。だから私はそれを見つけるために私のpydev eclipseバージョンを伝える必要があります。どこでこれを設定するのですか?

どのように解決するのですか?

ライブラリへのシンボリックリンクを作成することで問題を解決しました。すなわち

実際のライブラリは

/usr/local/mysql/lib

でシンボリックリンクを作成し

/usr/lib

コマンドを使用する

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

で、以下のようなマッピングになります。

ls -l libmysqlclient.18.dylib 
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

それだけでした。その後はすべてうまくいきました。

EDIT

MacOS El Capitan 以降、SIP (System Integrity Protection、別名 "rootless") は、リンクが /usr/lib/ . SIP を無効にするには、次のようにします。 以下の手順で にリンクを作成することができます。 /usr/local/lib/ の代わりに

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