Подтвердить что ты не робот

Ошибка неправильной архитектуры Python MySQL

Я был на этом некоторое время и прочитал много сайтов по этому вопросу. Подозреваю, что у меня есть ложь, лежащая о причинении этой проблемы. Но где?

Это ошибка, когда я импортирую MySQLdb в python:

>>> 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, чтобы он не мог попробовать и выбрать.

UPDATE

Удалил все и выполнил следующие инструкции: Django + MySQL на Mac OS 10.6.2 Snow Leopard, используя 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
>>> 
4b9b3361

Ответ 1

Когда интерпретатор говорит:

Вы установили MySQL_python-1.2.3c1 в /Library/Python/ 2.6/site-packages но вы добавляете в sys.path другую версию в /users/phoebebr/Downloads. Когда я пытаюсь импортировать MySQLdb из второго каталога, я обнаружил, что _mysql.so - из другой архитектуры.

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. Повторите попытку, чтобы узнать, соответствует ли версия in/library работает. Если нет, добавьте двоичный код для MacOS. В последнем случае загрузите источник MySQL-python и скомпилируйте его.

Ответ 2

У меня есть свежий MacBook Air, и мне удалось заставить 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

Загрузите 32-разрядный dmg файл MySQL с страниц mysql, установите его.

Добавьте следующие строки в ~/.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

работает так, как надо!

Ответ 3

Я просто боролся с тем же, несмотря на множество ответов, поэтому рискну добавить еще одно:

  • Запустите python -c 'import platform; print platform.platform()'. Оканчивается ли оно "64-битным"?
  • Сделайте ls -l /usr/local/mysql. Это символическая ссылка: заканчивается ли она "x86_64"?

Если python говорит "64-битный", то вы хотите, чтобы mysql для "x86_64" (найдите его в 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/

Ответ 4

Это вызвано тем, что ваш 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.

Ответ 5

Это выстрел в темноте - не знакомы с MACOSX - но я видел подобную проблему под Linux и мог ее разрешить только:

  • Удаление всех компонентов MySQLdb через диспетчер пакетов
  • Выполнение поиска низкого уровня для поиска любых оставшихся каталогов и файлов, связанных с MySQLdb - если вы вручную установили/построили MySQLdb, вы, вероятно, найдете некоторые ссылки на него где-нибудь, но, скорее всего, в каталоге сайтов-пакетов - я сделал и просто удалил это рекомендуемый подход, основанный на проведенных нами исследованиях.

Далее я попытался импортировать MySQLdb и удостоверился, что получил простую ошибку, что пакет не появился - по крайней мере, я знал, что MySQLdb удален на 100%

Затем я устанавливаю чистую установку через диспетчер пакетов, если эта опция существует, поскольку она будет на 100% совместима с вашей платформой и libs. Компиляция и т.д. Велик, но вам нужно много работать над ногами, чтобы убедиться, что у вас есть правильные клиентские библиотеки MySQL и т.д., Чтобы ссылаться (на основе моего болезненного опыта)

Удачи.

В худшем случае... вы можете использовать альтернативный вариант PyMySQL pure python (http://pypi.python.org/pypi/PyMySQL/0.2), но я должен признаться, что большинство людей рекомендуют MySQLdb

Ответ 6

У меня есть еще одно возможное решение для добавления.

Я решил проблему, добавив следующую строку в .profile (.bash_profile нормально, если это машина разработки):

export VERSIONER_PYTHON_PREFER_64_BIT=yes
export VERSIONER_PYTHON_PREFER_32_BIT=no

(2-я строка, возможно, не нужна, но, но после нескольких часов возиться, пытаться, перекомпилировать, я просто не мог бы больше беспокоиться об этом).

Ответ 7

Похоже, эта проблема связана с версией mysql, которая у вас есть на коробке. При компиляции компонента mysql python он использует mysql_config, который обычно живет в /usr/local/mysql/bin, чтобы определить, какие флаги передаются в CC при компиляции компонента mysql. Если у вас есть 32-разрядная версия mysql, вы получите 32-разрядную версию этого компонента, даже если у вас есть 64-разрядная версия python. В качестве примера у меня была следующая версия 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

Ответ 8

Эта проблема была решена для меня, выбрав правильную версию python. Если вы установили с macports:

sudo port select python python26

Ответ 9

Я встретил ту же проблему.

  • Моя ситуация: 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.so в каталоге MySQL-python-1.2.3 (это то, что вы загружаете) или просто удалите весь каталог и сгенерируйте его снова из файла tar. Затем выполните сборку и установите снова. Тогда _mysql.so будет 64 бит. Теперь вы можете импортировать его. Если вы видите dyld: Library not loaded, затем экспортируйте DYLD_LIBRARY_PATH=/usr/local/mysql/lib

Ответ 10

У меня была такая же проблема с MySQLdb в Mac OS X и Ubuntu, поэтому я переключился на официальный 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 (API-интерфейс Python DB версии 2.0).

Ответ 11

Дополнительное примечание, чтобы устранить проблему:

Сообщение об ошибке:

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 в 32-битном или 64-битном режиме OS X?

Ответ 12

У меня была та же проблема с моим ElCaptain Mac и решена проблема, следующая за этим другим сообщением . Просто используйте brew, и ваша проблема решена.