web-dev-qa-db-ja.com

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

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 __== '__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バージョンにそれがどこにあるかを伝える必要があります。これはどこに設定しますか?

167
toom

ライブラリへのシンボリックリンクを作成して問題を解決しました。つまり.

実際のライブラリは

/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のSystem Integrity Protection(SIP、「ルートレス」とも呼ばれる)により、/usr/lib/にリンクを作成できないことに注意してください。 これらの手順 に従ってSIPを無効にすることもできますが、代わりに/usr/local/lib/にリンクを作成できます。

Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
321
toom

私の好ましい方法は、アプリケーションの実行方法に応じて実際にスコープ内にある場合とそうでない場合がある環境変数で遊ぶよりも、実際にライブラリを修正することです。これは実際には非常に単純なプロセスです。

まず、エラー出力を見て、問題のある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)
132
Caleb Shay

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

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

それでおしまい。

56
yoshi

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

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ファイルの場所を見つけた方法です。

37
Nick Woodhams

これを.profileまたは.bashrc(どちらを使用する場合でも)に入れるのが最も簡単な方法であることがわかりました。symリンクはソースファイルにパスを保持するのに比べて面倒です。

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

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

いくつかの仮想環境でこれに遭遇しました。

pip uninstall MySQL-python
pip install -U MySQL-python

両方とも働いた。

4
John Redford

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

$ brew link mysql
3
keithpjolley

Pydev Eclipseプラグインでは、DYLDの環境変数を設定できます。パスは次のように設定できます

snow leopardにmysqldbをインストールする

3
Bharad

エルキャピタンにいる場合、エラーが表示されます:ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted「システム整合性保護」を閉じる必要があります。

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

2
yannisxu

SIP(rootlessがusr/lib /へのアクセスを防ぐ)がデフォルトでオンになっているEl Capitanの新規インストールでは、リカバリモードでない限りシンボリックリンクを作成できません。 @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

質問:

開発者ベータ1にはnvram boot-argsコマンドがあり、root権限で実行するとSIPを無効にできます。

nvram boot-args="rootless=0"

SIPを無効にするこのオプションは、El Capitanリリースバージョンでも使用できますか?または、これは開発者ビルド専用です?

回答:

このnvram boot-argsコマンドは廃止されます。 El Capitanリリースバージョンでは使用できず、開発者ベータが終了する前に消えることがあります。今後の開発者ベータ版のリリースノートに注目してください。

1
mrkzq

私の場合、エルキャピタン(OSX 10.11)では、~/.bash_profileで以下を行う必要があります

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

MacOS上のMySQL Connector/Cのバグに関する注意(現在のバージョンは10.13.2です)、mysql_configを修正し、mysqlclientまたはMySQL-pythonを再インストールします ここに詳細があります

0
Woody Huang

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

0
user6643531

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

私の場合は少し異なります。 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
James J. Ye

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

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
Xiaolin Leo