Проблемы с установкой 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, поэтому получил ошибку "но ошибочной архитектуры"