Python mysqldb:ライブラリがロードされていません:libmysqlclient.18.dylib


172

Mac OS 10.6にPython 2.7用のmysqldbをコンパイルしてインストールしました。インポートする簡単なテストファイルを作成しました

import MySQLdb as mysql

まず、このコマンドには赤い下線が引かれ、情報には「未解決のインポート」と表示されます。次に、次の単純な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

私の問題の解決策は何ですか?

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

回答:


323

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

実際のライブラリは

/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

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

編集:

MacOS El Capitan以降、システム整合性保護(SIP、「ルートレス」とも呼ばれる)により、でリンクを作成できないことに注意してください/usr/lib/。次の手順に従って SIPを無効にすることもできますが、/usr/local/lib/代わりにリンクを作成できます。

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

47
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
ヒューズ

私はmysql55MacPorts経由でインストールしましたが、このエラーを解決するために次のようにしました:sudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
philfreo

マーベリックスは私の古いシンボリックリンクを削除した後、私は少し異なる場所からシンボリックリンクする必要がありました: sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
マット

2
El Capitan:forums.developer.apple.com/thread/7935で実行している場合は、SIPを無効にする必要があります。
Joshua Pinter、2015

El Capitanの新規インストール後、このヒントではSIPを無効にする必要がないことがわかりました。
Lonoshea、2015年

135

私が好む方法は、アプリケーションの実行方法に応じて実際にスコープ内にある場合とない場合がある環境変数を操作するのではなく、実際にライブラリを修正することです。これは実際にはかなり単純なプロセスです。

まず、エラー出力を見て、問題のPythonモジュールがどこにあるかを確認します。

ImportError:dlopen(/Library/Python/2.7/site-packages/_mysql.so、2):ライブラリがロードされていません:libmysqlclient.18.dylib参照元:/Library/Python/2.7/site-packages/_mysql.so理由:画像が見つかりません

さて、問題のファイルは/Library/Python/2.7/site-packages/_mysql.soです。

次に、_mysql.soがlibmysqlclient.18.dylibを見つける必要があると考える場所を見つけます。

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
    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)

したがって、パス情報のないlibmysqlclient.18.dylibを探しています。修正しましょう。

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so

これで_mysql.soはライブラリへのフルパスを認識し、環境変数に関係なくすべてが機能します。

% otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
/Library/Python/2.7/site-packages/_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)

4
これはもっと良い解決策ではないでしょうか?すべてのvirtualenvでそれを修正しますか?sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib $ VIRTUAL_ENV / lib / python2.7 / site-packages / _mysql.so
Brad Ruderman

1
@BradRuderman与えたコマンドを実行すると、1つのvirtualenvだけを修正することを明確にすることが重要だと思います-現在のvirtualenvだけです。さらに、誰もが(有害なことに)virtualenvで実行しているわけではないため、コマンドラインは一般的なソリューションではありません。
GreenAsJade 2014年

1
与えられた例は、グローバルなpython / mysqlを修正していることに注意してください。仮想環境のそれぞれで修正する必要があります。あなたが私のようであれば、それらが場所_mysql.soであるその最初の部分をじっと見て、それは重要なステップです。
Ben Rabidou、2015年

これはVirtualEnvironments内にインストールされた_mysql.soで機能し、El CapitanでSIPを無効にする必要はありません。
アーロンD

説明をありがとう@Caleb :) :)(Y)
Sachin Malhotra

59

この問題には、シンボリックリンクを作成するのではなく、別の解決策があることがわかりました。

libmysqlclient.18.dylibが存在するディレクトリへのパスをDYLD_LIBRARY_PATH環境変数に設定します。私がしたことは、次の行を.bash_profileに入れることです:

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

それでおしまい。


7
/ usr / local / mysqlにもシンボリックリンクがあり、インストールされているバージョンをポイントしているため、次の行に変更することをお勧めします。export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /:$ DYLD_LIBRARY_PATH
sneak

37

私の場合、Mac OS X 10.9 Mavericksでエラーが発生しました。MySQL Community Serverは、DMGのOracle / MySQL Webサイトから直接インストールしました。

libファイルを/ usr / local / libディレクトリにシンボリックリンクするだけで済みました。

mkdir -p /usr/local/lib   
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

おまけ:Mac OS Xも実行している場合は、libmysqlclient.18.dylibファイルhttp://apps.tempel.org/FindAnyFileなどのファイルを見つけるための優れたツールがあります。これが最初にdylibファイルの場所を見つけた方法です。


1
/usr/local/libディレクトリを作成する必要がありましたが、魅力的に機能しました。
Nick Merrill

25

これを.profileまたは.bashrc(どちらを使用しても)に配置するのが最も簡単な方法です。symリンクは、ソースファイルにパスを保持するのに比べて乱雑です。

また、yoshisurfsの回答と比較すると、mysqlがインストールされるほとんどの場合、使いやすさのために、mysqlディレクトリの名前をファイル名全体ではなく、mysqlのみに変更する必要があります。

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

2
これは本当に正気で単純な答えのようです。私にとってはうまくいった-ありがとう!
Darragh Enright 2015年



3

homebrewを使用している場合は、次の方法で修正できます。

$ brew link mysql

これは私にとってはうまくいきました、それはこのようなリンクを作成しました:/usr/local/lib/libmysqlclient.18.dylib-> /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
Joshua Grigonis

2

私の場合、El Capitan(OSX 10.11)では、次のようにする必要があります ~/.bash_profile

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"

2

El Capitanにいる場合、エラーが発生します。ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted 「システム整合性保護」を閉じる必要があります。

最初に、再起動してcmd + Rをcsrutil disable押し続けてリカバリモードに入り、ターミナルを起動して次のコマンドを入力します。これで、再起動して再試行できます。


ファイルをbash_profileに移動libmysqlclient.18.dylib/usr/local/libてパスPATH=/usr/local/lib:$PATHを追加する別の方法。それは私のために働いています。
Bun Suwanparsert 2015年

1

El Capitanの新しいインストールでは、SIP(rootlessはusr / lib /へのアクセスを禁止する)がデフォルトでオンになっており、リカバリモードでない限り、シンボリックリンクを作成できません。@yannisxuが言ったように、SIPを無効にして/ usr / lib / localへのシンボリックリンクを作成すれば、これは機能します。

SIPをオフにする代わりに、MAC OSX El Capitanで次のコマンドを使用できます。

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

以前はrootとしてログインしてSIPを無効にできるオプションがありましたが、廃止された最終リリースでは、https//forums.developer.apple.com/thread/4686で詳細を確認できます

質問:

root権限で実行したときにSIPを無効にできるDeveloper Beta 1で利用可能なnvram boot-argsコマンドがあります。

nvram boot-args="rootless=0"

El Capitanリリースバージョンでは、SIPを無効にするこのオプションも利用できますか?それとも、これは厳密に開発者向けビルドですか?

回答:

このnvram boot-argsコマンドは廃止されます。El Capitanリリースバージョンでは利用できなくなり、開発者ベータの終了前になくなる可能性があります。将来の開発者向けベータ版のリリースノートに注意してください。


0

私にはこの問題があり、それを修正する方法を見つけるのにしばらく時間がかかりました。

私の場合は少し異なります。MySQLサーバーのバージョンは5.1.xです。そしてどういうわけか、MySQL-pythonを1.2.3から1.2.5にアップグレードしました。その後、この問題が発生し続けましたが、その後、次のソフトリンクを追加しました。

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

MySQL 5.1.xの場合、libmysqlclient.18.dylibはなく、libmysqlclient.16.dylibのみであることがわかります。この問題は、MySQL-pythonを1.2.3にダウングレードするか、MySQLサーバーを5.6.xにアップグレードすることで修正できます(5.5.xは試していません)。

MySQLのアップグレードは私の選択肢ではないため、ライブラリを1.2.3にダウングレードしました。


0

http://dev.mysql.com/downloads/connector/c/に移動し、MySQL Connector / Cをダウンロードします。パッケージを取得したら、新しいディレクトリ「mysql」を作成し、MySQLコネクタファイルをディレクトリmysqlで解凍し、mysqlで別の空のディレクトリ「build」を作成します。「build」を使用してMySQL Connector / Cをビルドします。cd build && cmake ../your-MySQL-Connector-source-dir make && make install make installすると、/ usr / localの下にmysqlというディレクトリが作成されます。これには、必要なすべてのヘッダーとライブラリが含まれています。このディレクトリに移動し、ヘッダーとライブラリを対応する場所にコピーします。


0

あなたが試すことができます:

sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`

0

macOS(私の現在のバージョンは10.13.2)上のMySQL Connector / Cのバグについて注意し、mysql_configを修正してmysqlclientまたはMySQL-pythonを再インストールします。詳細は次のとおりです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.