1

最近、OSx Mountain Lion (10.8) にアップグレードし、その直後に 10.8.1 にアップグレードしました。「MySQLdb のインポート」を実行しようとしたところ、次のエラーが発生しました。

>>> import MySQLdb
/Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.7/site-packages/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg/_mysql.pyc, but /Users/jlk/Software_Downloads/MySQL-python/MySQL-python-1.2.3 is being added to sys.path
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "MySQLdb/__init__.py", line 19, in <module>
    import _mysql
  File "build/bdist.macosx-10.8-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.8-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/jlk/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
    /Users/jlk/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.8-intel.egg-tmp/_mysql.so: mach-o, but wrong architecture

何が間違っているのか、それを修正する方法がよくわかりません。私はグーグルで調べましたが、この問題でosx 10.8.1に関連する答えを見つけることができません. 最後に「間違ったアーキテクチャ」と述べていますが、インストールしたのはモジュールのOSxバージョンであることはわかっています。私が見る唯一の違いは、10.8 用と表示されていることですが、これがモジュールの最新バージョンです。

参考のため:

OS: OSx Mountain Lion 10.8.1 パイホン バージョン: 2.7.2

何か案は?

よろしく、

ジェフ

4

1 に答える 1

2

使用している python インタープリターと _mysql.so は、異なるアーキテクチャ セット用に構築された可能性があります。たとえば、1 つは i386 のみで、もう 1 つは 32/64 ビット ファットです。file /path/to/your python interpreter出力を実行しfile /path/to_mysql.soて比較することで確認できます。

MySQLdb を再構築して、pip / easy_install が正しい Python インタープリターを使用していることを確認できますか? また、まだ行っていない場合は、Xcode のバージョンとそのコマンド ライン ツールをアップグレードして、通常のビルド エラーの発生を回避してください。

編集: AppleのストックPython 2.7.1を使用して、10.7でこれを再現できました。問題は、Python インタープリター、MySQLdb、および MySQL サーバー間のアーキテクチャーの不一致です。Python は 32/64 ビットのファット ビルドです。私がインストールした MySQL のバージョンは 32 ビットのみです。MySQLdb はビルド時に MySQL のアーキテクチャを参照するため、32 ビットのみの _mysql.so を取得しました。おそらく 64 ビット モードで実行される python でモジュールをインポートすると、エラーが発生します。

MySQL の 64 ビット バージョンをインストールして実行し、MySQL-Python を再構築することでこれを解決できると思います。または、Python を強制的に 32 ビット モードで実行することもできます。

于 2012-09-08T09:06:41.280 に答える