2011-01-19 12 views
10

MySQL 5.5.8(http://dev.mysql.com/downloads/mysql/)とMySQLdb pythonプラグインのインストール手順をダウンロードして従いました。 (http://sourceforge.net/projects/mysql-python/Python import MySQLdbエラー - Mac 10.6

私はPythonの端末へのMySQLdbをインポートしようとすると、私は以下のエラーが表示されます。

Safira:~ yanigisawa$ python --version 
Python 2.6.1 
Safira:~ yanigisawa$ python -c "import MySQLdb" 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/MySQLdb/__init__.py", line 19, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 7, in <module> 
    File "build/bdist.macosx-10.6-universal/egg/_mysql.py", line 6, in __bootstrap__ 
ImportError: dlopen(/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.16.dylib 
    Referenced from: /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 
    Reason: image not found 
Safira:~ yanigisawa$ 

私は、スタックオーバーフロー上の質問4559699を見つけ、そこの指示に従っ:

Safira:~ yanigisawa$ echo $DYLD_LIBRARY_PATH 
/usr/local/mysql/lib 
Safira:~ yanigisawa$ ls -l /usr/local/mysql/lib 
total 363224 
-rwxr-xr-x 1 root wheel 3787328 Jan 18 19:41 libmysqlclient.16.dylib 
-rw-r--r-- 1 root wheel 10035336 Dec 3 13:26 libmysqlclient.a 
lrwxr-xr-x 1 root wheel  23 Jan 14 22:01 libmysqlclient.dylib -> libmysqlclient.16.dylib 
lrwxr-xr-x 1 root wheel  20 Jan 14 22:01 libmysqlclient_r.16.dylib -> libmysqlclient.dylib 
lrwxr-xr-x 1 root wheel  16 Jan 14 22:01 libmysqlclient_r.a -> libmysqlclient.a 
lrwxr-xr-x 1 root wheel  20 Jan 14 22:01 libmysqlclient_r.dylib -> libmysqlclient.dylib 
-rw-r--r-- 1 root wheel 88033760 Dec 3 13:22 libmysqld-debug.a 
-rw-r--r-- 1 root wheel 84075304 Dec 3 13:26 libmysqld.a 
-rw-r--r-- 1 root wheel  8472 Dec 3 13:26 libmysqlservices.a 
drwxr-xr-x 13 root wheel  442 Dec 3 13:53 plugin 
Safira:~ yanigisawa$ md5 /usr/local/mysql/lib/libmysqlclient.16.dylib 
MD5 (/usr/local/mysql/lib/libmysqlclient.16.dylib) = b8a78a93183720021b9dbe9ddad57111 
Safira:~ yanigisawa$ 

そして、すべてのpython eggファイルを消去して再構築した後、私はまだ同じエラーが出ます。それから、MySQL 5.5.8でMac 10.6に影響するバグ59006(http://bugs.mysql.com/bug.php?id=59006)が見つかりました。私はそこにリストされた回避策を試し、卵をきれいにして再構築しましたが、私はまだこのエラーを受けています。

pythonに固有のこの問題の別の回避策がありますか?私は何か他のものを逃している?

EDIT:コマンドotoolコマンドからの出力を追加:あなたは正確に何をライブラリパスにMySQLdb C拡張を見つけるためにコマンドotoolを実行してみてください可能性が

Safira:~ yanigisawa$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 
/Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: 
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1) 
Safira:~ yanigisawa$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib 
/usr/local/mysql/lib/libmysqlclient.16.dylib 
Safira:~ yanigisawa$ 

答えて

11

を、_mysql.soが探している:

$ otool -L /Users/yanigisawa/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so 

MySQLライブラリファイルのインストールされているライブラリ名:

$ otool -DX /usr/local/mysql/lib/libmysqlclient.16.dylib 

しかし、DYLD_LIBRARY_PATHを設定する(または実行可能ファイルを変更するにはinstall_name_toolを使用する)必要はありません。それを設定する必要性は、ほとんどの場合、間違って構築またはインストールされたコンポーネントの兆候です。私の経験では、MySQLプロジェクトはOS Xのビルドとインストーラの一貫性のための非常に良い実績はありません。

MySQLdbPythonの作業の組み合わせを取得しようとすると、OS X 10.6でのMySQLライブラリは、フラストレーションの非常に一般的な原因である:SO、他の場所で、ここでそれについての質問がたくさん。それにはいくつかの理由があります。私のアドバイスは、必要なものすべてを互換性のあるバージョンで構築してインストールするサードパーティディストリビュータからの完全なソリューションを利用することです。そして、時間が経つにつれてコンポーネントをアップグレードする必要があるなら、それは動作し続けるはずです。私は長年にわたって良好な成功を収めてきたMacPorts;他の人はFinkまたはそれより新しいものを好むHomeBrewです。 MacPortsで、MacPortsからベースファイルをインストールした後。 MacPortsのPythonが/opt/local/bin/python2.6で利用できるようになります

$ sudo port selfupdate # ensure the port files are up-to-date 
$ sudo port install py26-mysql 

dmgは、あなたはとてもように構築されたすべてのものを得ることができます。 Djangoを実行する場合は、そのポートもあります。

EDIT:otoolの更新された出力を使用すると、ライブラリパス名の不一致が確認できます。 MySQLdb拡張モジュールは、相対パス名(初期値はなし/)を求めていますが、MySQLライブラリは絶対パスで広告します。これは、MySQLの問題59006の逆であるようですが、あなたが今まで実行したステップを正確に知らないと、あなたがこの状態にどのようになったのかを言うのは本当に難しいです。install_name_toolを使用して、_mysql.soに絶対パス名をパッチしても、DYLD_LIBRARY_PATHを設定する必要がなくなります。

$ cd ~/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp 
$ sudo install_name_tool -change libmysqlclient.16.dylib \ 
           /usr/local/mysql/lib/libmysqlclient.16.dylib \ 
         _mysql.so 

しかし、それはあなたが何かを更新する必要があるときに、結果を再現することができます暖かいとファジー感を残すべきではない:それは試してみる価値です。これらのすべての作品をさまざまなソースから作品の中に接着しようとするのは本当に美徳がありません。私の場合は

+0

私はまだMac OSの新人です。 (今のところ約2ヶ月)私は話すために「火災による試験」を受けることを望んでいました。しかし、私はこの作業を得ることができない場合は、私は、MACポートオプションを使用することに頼るでしょう。提案していただきありがとうございます。 – yanigisawa

+0

最終的にMacPortsソリューションが機能しました。私の2.6.1インストール側にpython 2.6.6をインストールし、/ usr/bin/pythonは2.6.1を指していたので、上記のエラーがapache cgiスクリプトで発生していました。 2.6.6バージョンへのシンボリックリンクを追加しなければならず、すべてが正常に動作するようになりました。ありがとう。 – yanigisawa

+0

嬉しいです。しかし、一般的には、 '/ usr/local'以外のものを上書きすることは非常に悪い考えです。それはすべてOS Xの一部としてAppleによって管理されている。あなたがあなたが '/ usr/bin/python'を上書きすることを意味するかどうかは分かりません。複数のバージョンを扱うより良い方法は、 '$ PATH'の前に'/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin'を置くようにシェルの起動ファイルを変更するか、参照時に絶対参照を使うことですPythonには、 '/opt/local/bin/python2.6 'があります。 –

49

は、私は次のようhttp://ageekstory.blogspot.com/2011/04/installing-massive-coupon-on-mac-os-10.html

のようにシンボリックリンクのカップルを追加することによって解決:

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

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

+0

+1:これもここで解決してください。 –

+1

+1これは、Ned Deilyの編集がうまくいくように見えても、数時間後についに私の問題を解決しましたが、 – cerberos

+0

+1です。 TANX !!! – karantan

1

を私はのMySQLdbモジュールをコンパイルしてunfoundダイナミクスライブラリーの問題に対処しようとしました静的ライブラリ(site.cfg内のset static = True)。しかし、_mysql.oが動的ライブラリを依頼していたのと同じエラーが発生しました。これを修正するために、私はをブロックのsetup_posix.pyに静的に追加しました。

関連する問題