Проблемы с установкой mysql-python (на mac os x lion)
Я все успешно установил, или так думал:
- MySQL 5.5 для x86_64.
- Python 2.7, x86_64.
- mysql-python 1.2.3, x86_64.
Но когда я пытаюсь:
import MySQLdb
Я получаю:
ImportError:
dlopen(/Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so, 2):
no suitable image found.
Did find:
/Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so: mach-o,
but wrong architecture
Что еще я могу потерять?
Моя система, конечно, также имеет 64-битную версию, uname -a
дает:
Darwin ajmacbook.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_X86_64 x86_64
Я думаю, что я прочитал большинство ответов SO и результаты Google по этому вопросу, не могу придумать ничего другого, чтобы попробовать. Любое предложение будет оценено.
Ответы
Ответ 1
С помощью комментария от @birryree я нашел проблему. Вероятно, мне было бы лучше следовать процедуре, предложенной @birryree в его ответе, но я пробовал это раньше, и это сработало:
Как и было предложено, я сделал:
file /Users/aj/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-ix86_64.egg-tmp/_mysql.so
Чтобы получить: [...]: Mach-O bundle i386
Итак, неправильная архитектура. Оттуда я сделал то же самое с mysql и python, чтобы быть уверенным:
file $(which python)
дал:
/Library/Frameworks/Python.framework/Versions/2.7/bin/python: Mach-O universal binary with 2 architectures
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture i386): Mach-O executable i386
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
И file $(which mysql)
:
/usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64
Итак, я удалил пакет mysql-python: sudo pip uninstall mysql-python
и снова установил его. Но при этом я понял свою предыдущую ошибку при установке этого пакета. Впервые я набрал:
sudo ARCHFLAGS='-arch ix86_64' python setup.py build
(и "установить" впоследствии)
Название архитектуры было неправильным, должно быть "-arch x86_64", no "i", поэтому он просто проигнорировал мой флаг и установил 32-разрядную версию.
Правильные команды для установки загруженного пакета mysql-python для 64-битной (из исходной папки):
sudo ARCHFLAGS='-arch x86_64' python setup.py build
sudo ARCHFLAGS='-arch x86_64' python setup.py install
Ответ 2
Я думаю, что могут возникнуть небольшие причуды, когда вы делаете это на Mac 64-bit (и если у вас эта проблема слишком много).
Я столкнулся с этим, и есть несколько вещей, которые вы можете сделать:
Переопределить среду
Вы можете изменить переменную среды DYLD_LIBRARY_PATH
, которая сообщает компоновщику, где искать динамические библиотеки (файлы .so и т.д.). Вы сказали, что вы также загрузили 64-битную версию MySQL, поэтому, когда бы она ни была установлена, измените путь, который вы видите здесь:
В оболочке:
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
И затем запустите python
и посмотрите, можете ли вы import MySQLdb
.
Если это работает, вы можете сделать это постоянным, изменив профиль вашей оболочки (.bash_profile
, скорее всего).
Использовать доморощенный
Мне не нравится, когда вы заставляете MySQL и Python, и все это правильные архитектуры и их установка отдельно. Я запускаю homebrew
, который является своего рода менеджером пакетов для Mac. Если вы установите это, вы можете довольно легко позаботиться об этой проблеме:
-
brew install python
-
brew install mysql
-
/usr/local/share/python/easy_install mysql-python
Обратите внимание, что homebrew устанавливается в /usr/local
, поэтому вы должны добавить /usr/local/bin
в PATH
, опережая /usr/bin
и /bin
, иначе вы действительно смутитесь, почему python
отличается.
Вы можете добавить /usr/local/share/python
в свой PATH
, чтобы сделать его постоянным.
Ответ 3
ОЧЕНЬ ВАЖНО!
Как упоминалось выше, убедитесь, что вы используете 64-разрядную версию mysql. Легко упустить эту деталь, особенно если вы обновили ее от Snow Leopard. (Я, конечно, сделал).
если вы не уверены в удалении старой версии mysql в своей системе, обратитесь к этому сообщению: http://johnmcostaiii.net/2011/removing-mysql-osx-lion/
Ответ 4
У меня была та же проблема и много головной боли с MySQLdb после исправления 64-битной проблемы (она также жаловалась на то, где находится libmysqlclient.18.dylib).
Я думаю, что пришло время переключиться на официальный MysQL Python Connector?
sudo pip install mysql-connector-python
Или загрузите его из: http://dev.mysql.com/downloads/connector/python/
Документация: http://dev.mysql.com/doc/refman/5.5/en/connector-python.htm
Он прост в использовании и совместим с PEP 249 (API-интерфейс Python DB версии 2.0).
Ответ 5
Также убедитесь, что вы используете Python 64-bit. Я запускал mysql 64 бит и Python 32bit, поэтому получил ошибку "но ошибочной архитектуры"