web-dev-qa-db-ja.com

Python MySQLの間違ったアーキテクチャエラー

私はしばらくこれにいて、この主題に関する多くのサイトを読みました。私はこの問題を引き起こすことについて嘘をついているがらくたを持っていると思われます。しかしここで?

これは、PythonでMySQLdbをインポートするときのエラーです。

>>> import MySQLdb
    /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg/_mysql.pyc, but /Users/phoebebr/Downloads/MySQL-python-1.2.3c1 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.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/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
        /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so: mach-o, but wrong architecture

私は64ビットを試しているので、ここで確認してください:

file $(which python)
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc
file $(which mysql)
/usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64

デフォルトバージョンのpythonを2.6に設定しました

python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

ビルドディレクトリとpython setup.py cleanの名前をPython/2.5/site-packagesに変更して、それを取得できないようにしました。

更新

すべてを削除し、ここの指示に従いました: Mac OS 10.6.2 SnowLeopard上のDjango + MySQL macportsを使用してインストールします。

しかし、基本的には同じエラーが発生します

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so, 2): no suitable image found.  Did find:
    /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so: mach-o, but wrong architecture
>>> 
26
PhoebeB

通訳が言うとき:

MySQL_python-1.2.3c1を/Library/Python/2.6/site-packagesにインストールしましたが、sys.pathに別のバージョンを/ users/phoebebr/Downloadsに追加しています。 2番目のディレクトリからMySQLdbをインポートしようとすると、_mysql.soが別のアーキテクチャからのものであることがわかりました。

だから、あなたはMySQLdbの間違ったバージョンで終わったようです。 /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmpおよび/Users/phoebebr/Downloads/MySQL-python-1.2.3c1を削除します。/library内のバージョンが機能するかどうかを確認するために、もう一度テストします。そうでない場合は、MacOSのバイナリをダウンロードしてください。最後に、MySQL-pythonのソースをダウンロードしてコンパイルします。

2
jdinunzio

私は新しいMacBookAirを持っていて、次のようにしてMySQLdbを機能させることができました:( Snow Leopard 10.6.6、プリインストールされたPython)

uname -a
Darwin Braindamage.local 10.6.0 Darwin Kernel Version 10.6.0: Wed Nov 10 18:13:17 PST 2010; root:xnu-1504.9.26~3/RELEASE_I386 i386

MysqlページからMySQL32ビットdmgファイルをダウンロードしてインストールします。

〜/ .profile(または〜/ .bash_profile)に次の行を追加します。

PATH="/usr/local/mysql/bin:${PATH}"
export PATH
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
export VERSIONER_PYTHON_PREFER_64_BIT=no
export VERSIONER_PYTHON_PREFER_32_BIT=yes

保存後、ターミナルに次のように入力します:source〜/.profile

MySQL-python-1.2.3.tar.gz unzip、untar、cdをそのディレクトリにダウンロードします

python2.5 setup.py build
Sudo python2.5 setup.py install

そのディレクトリを終了します(または警告が表示されます)

python2.5
import MySQLdb

または

python
import MySQLdb

本来の動作をします!!

29
Pekka Toiminen

多くの答えがあるにもかかわらず、私は同じことに苦労したので、別のものを追加するリスクがあります:

  • python -c 'import platform; print platform.platform()'を実行します。 「64ビット」で終わりますか?
  • ls -l /usr/local/mysqlを実行します。これはシンボリックリンクです。「x86_64」で終わりますか?

pythonが「64ビット」と言っている場合は、「x86_64」のmysqlが必要です( http://dev.mysql.com/downloads/mysql/ で検索してください) =)。pythonが「32ビット」と言っている場合は、おそらく「x86」mysqlが必要です。一致するものがありますが、それでも機能しない場合は、他の回答を読んでください( VERSIONER_PYTHON_PREFER_32_BITなどについて)

私にとって、不一致は"mach-o, but wrong architecture"エラーを引き起こしました。次のエラーは"Library not loaded: libmysqlclient.18.dylib... Reason: image not found"でした。

これを解決するには、(他の回答で説明されているようにDYLD_LIBRARY_PATHを設定するのではなく)シンボリックリンクを追加することをお勧めします。

Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/
13
DS.

これは、Pythonが32ビットであるが、どういうわけか、インストールされているMySQLライブラリが64ビットであることが原因です。この問題を解決するには、次のコマンドを使用して手動でインストールできます。

wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz
tar xvf MySQL-python-1.2.3.tar.gz
cd MySQL-python-1.2.3
ARCHFLAGS="-Arch i386" python setup.py install

ARCHFLAGS = "-Arch i386"を使用すると、i386アーキテクチャとしてコンパイルする必要があります。

4
Fang-Pen Lin

これは暗闇の中でのショットです-MACOSXに精通していません-しかし、Linuxでも同様の問題が発生し、次の方法でしか解決できませんでした。

  1. パッケージマネージャーを介してすべてのMySQLdbコンポーネントをアンインストールする
  2. 低レベルの検索を実行して、MySQLdbに関連する残りのディレクトリとファイルを見つけます-MySQLdbを手動でインストール/ビルドした場合、おそらくどこかに参照がありますが、おそらくsite-packagesディレクトリにあります-私が行ったのは、単にそれらを削除することです私が行った調査に基づいた推奨アプローチ

次に、MySQLdbをインポートしようとしましたが、パッケージが存在しないという単純なエラーが発生したことを確認しました。少なくとも、MySQLdbが100%削除されていることはわかっていました。

次に、そのオプションが存在する場合は、パッケージマネージャーを介してクリーンインストールします。これは、プラットフォームおよびライブラリと100%互換性があるためです。コンパイルなどは素晴らしいですが、リンクする適切なMySQLクライアントライブラリなどがあることを確認するために多くのレッグワークを行う必要があります(私の苦痛な経験に基づいて)

幸運を。

最悪の場合...代替のPyMySQLpure python option( http://pypi.python.org/pypi/PyMySQL/0.2 )を使用できますが、ほとんどの人がMySQLdbを推奨していることを告白する

1
belvoir

この問題は、ボックスにあるmysqlのバージョンに関連しているようです。 python mysqlコンポーネントをコンパイルするとき、通常/ usr/local/mysql/binにあるmysql_configを使用して、mysqlコンポーネントをコンパイルするときにCCに渡すフラグを決定します。32ビットの場合バージョンのmysqlを実行すると、64ビットバージョンのpythonを使用している場合でも、このコンポーネントの32バージョンを取得できます。例として、次のバージョンのmysqlを使用しました...

/usr/local/mysql-5.5.16-osx10.6-x86と私は実行されているはずです.../usr/local/mysql-5.5.16-osx10.6-x86_64

私のマシンで64ビットバージョンのmysqlに切り替えて、実行しています... Sudo pip install mysql-python

私の問題を修正しました。次のコマンドを実行して、mysqlコンポーネントがどのようにビルドされるかを確認できます...

/ usr/local/mysql/bin/mysql_config --cflags

このようなものが表示されるはずです...

-I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -Arch x86_64

1
Peter

追加する別の可能な解決策があります。

.profileに次の行を追加することで問題を解決しました(.bash_profileは開発マシンであれば問題ありません):

export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no

(ただし、2行目は必要ないかもしれません。しかし、何時間もいじったり、試したり、再コンパイルしたりした後、私はもうこれを試すのに悩むことができませんでした)。

1
Markus

Mac OS XとUbuntuのMySQLdbでも同じ問題が発生したため、公式のMysQL Python Connector:(PyPIで利用可能):

Sudo pip install mysql-connector-python

またはダウンロード元: http://dev.mysql.com/downloads/connector/python/

ドキュメント: http://dev.mysql.com/doc/refman/5.5/en/connector-python.html

使いやすく、PEP 249(Python DB APIバージョン2.0)とも互換性があります。

0

私は同じ問題に遭遇しました。

  • 私の状況:Mac OSX 10.6、pythonは64ビット、mysqlは32ビット、_mysql.soは32ビットです。

  • 解決策:mysql(http://steveno.wordpress.com/2009/03/26/uninstall-mysql-on-mac-os-x/)をアンインストールし、64ビットmysqlをインストールします。次に、mysql_configがインストールしたばかりのものを指していることを確認します。

重要:
MySQL-python-1.2.3ディレクトリ(これはダウンロードしたものです)のすべての_mysql.soを削除するか、ディレクトリ全体を削除してtarファイルから再度生成します。次に、ビルドして再度インストールします。その場合、_mysql.soは64ビットになります。これで、インポートできます。 dyld: Library not loadedが表示されている場合は、DYLD_LIBRARY_PATH=/usr/local/mysql/libをエクスポートします。

0
talent

私はElCaptainMacで同じ問題を抱えていて、この他の問題を解決しました post 。 brewを使用するだけで、問題は解決します。

0
Arthur Accioly

問題を明確にするための追加の注意:

エラーメッセージは次のとおりです。

ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so, 2): no suitable image found.  Did find:
    /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so: mach-o, but wrong architecture

mach-o、しかし間違ったアーキテクチャエラーは、python_ mysql.soのアーキテクチャは異なります(32ビット/ 64ビットバイナリ)。次の方法で確認できます。

file $(which python)
file /Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.Egg-tmp/_mysql.so

そして、それらが一致しない場合は、それらを一致させる必要があります。私の場合、私の_mysql.soは32ビットであり(たまたま32ビットのmysqlをインストールしました)、私のpython2.7はデフォルトで64ビットで実行されます。 pythonを32ビットで実行するように強制します。

export VERSIONER_PYTHON_PREFER_32_BIT=yes

そして問題は解決しました。

python 2.6 +は64ビットモードまたは32ビットモードで実行できます。チェックしてください pythonシェルが実行されているかどうかを確認するにはどうすればよいですか? OS Xの32ビットまたは64ビットモードで?

0
hhwithgroups

この問題は、正しいpythonバージョンを選択することで解決しました。macportsを使用してインストールした場合:

Sudo port select python python26
0
hughes