177

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 バージョンの場所を指定する必要があります。これはどこに設定すればよいですか?

4

15 に答える 15

324

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

実際のライブラリは次の場所にあります

/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
于 2011-08-06T15:28:29.377 に答える
138

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

まず、エラー出力を見て、問題のある 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)
于 2012-11-16T17:56:50.597 に答える
60

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

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

それでおしまい。

于 2011-08-10T03:18:56.017 に答える
37

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

于 2013-10-27T20:30:50.617 に答える
26

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

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
于 2012-06-29T16:09:54.947 に答える
3

pydev eclipse プラグインでは、DYLD の環境変数を設定したい場合があります。パスは次のように設定できます。

Snow Leopard に mysqldb をインストールする

于 2011-06-30T15:40:46.917 に答える
2

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

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

于 2015-09-09T06:15:57.247 に答える
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 を無効にできる nvram boot-args コマンドが Developer Beta 1 で利用可能です。

nvram boot-args="rootless=0"

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

答え:

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

于 2015-10-07T09:16:01.263 に答える
0

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 という名前のディレクトリが作成されます。必要なすべてのヘッダーとライブラリが含まれています。このディレクトリに移動し、ヘッダーとライブラリを対応する場所にコピーします。

于 2016-07-27T08:02:42.160 に答える
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`
于 2018-02-10T01:58:52.350 に答える