Ошибка неправильной архитектуры 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
>>>
Ответы
Ответ 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, и ваша проблема решена.