Установка MySQLdb для Django на Mac OS X 10.6 Snow Leopard с помощью MAMP - PullRequest
4 голосов
/ 04 июня 2011

Так что я знаю, что это не новая тема, но ее, кажется, никто не может решить, по крайней мере, для Python 2.6 / Snow Leopard.(Обнаруженные мной исправления Leopard неприменимы к Snow Leopard.)

Ситуация: я пытаюсь установить Django локально на моем Mac OS X Snow Leopard.(10.6.7) У меня есть Python 2.6.1, который был предустановлен с Snow Leopard, MySQL-python 1.2.3 и MAMP 1.9.6.Все они являются последними текущими версиями.

Без внесения каких-либо изменений в пакет MySQLdb, если я запускаю python setup.py build, я получаю сотни или более ошибок, первая из которых:

$ python setup.py build
running build
running build_py
copying MySQLdb/release.py -> build/lib.macosx-10.6-universal-2.6/MySQLdb
running build_ext
building '_mysql' extension
creating build/temp.macosx-10.6-universal-2.6
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch ppc -arch x86_64 -pipe -Dversion_info=(1,2,3,'final',0) -D__version__=1.2.3 -I/Applications/MAMP/Library/include -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c _mysql.c -o build/temp.macosx-10.6-universal-2.6/_mysql.o -fno-omit-frame-pointer -g
_mysql.c:36:23: error: my_config.h: No such file or directory
_mysql.c:38:19: error: mysql.h: No such file or directory
_mysql.c:39:26: error: mysqld_error.h: No such file or directory
_mysql.c:40:20: error: errmsg.h: No such file or directory
_mysql.c:76: error: expected specifier-qualifier-list before 'MYSQL'
_mysql.c:90: error: expected specifier-qualifier-list before 'MYSQL_RES'

иоканчивающийся на:

_mysql.c:2422: error: initializer element is not constant
_mysql.c:2422: error: (near initialization for '_mysql_ResultObject_memberlist[0].offset')
_mysql.c: In function '_mysql_ConnectionObject_getattr':
_mysql.c:2444: error: '_mysql_ConnectionObject' has no member named 'open'
lipo: can't open input file: /var/folders/Br/Br8Yhf-IGVCaGfXw4TYRc++++TI/-Tmp-//ccFnIslh.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1

Поэтому я обновил site.cfg файл, указав местонахождение mysql_config:

# The path to mysql_config.
# Only use this if mysql_config is not on your PATH, or you have some weird
# setup that requires it.
mysql_config = /Applications/MAMP/Library/bin/mysql_config

Все та же ошибка.Последние два дня я потратил на устранение неполадок, поэтому я сделал целый ряд других вещей (включая ez_setup, загрузку файлов .egg и ручное изменение некоторых параметров в коде), но ни один из них не принес никаких результатов.разные результаты, поэтому я не буду утомлять вас всеми деталями.В общем, могло быть что-то очевидное, чего мне не хватает, кто знает?(с надеждой).Python и MySQL работают нормально, поэтому я не пытался этого избежать, а переустанавливал MySQL не через MAMP.Но если у кого-то есть основания полагать, что это необходимо, я попробую.

Любая помощь будет принята с благодарностью!Спасибо.

1 Ответ

2 голосов
/ 28 июля 2011

Я смог заставить это работать так, как вы ожидаете.

Пара вещей:

Прежде всего, lipo: can't open input file указывает на предыдущий сбой компиляции.Сценарии установки должны действительно давать сбой и показывать более раннюю ошибку;Я не знаю, почему это не так.

Во-вторых, MySQLdb получает всю информацию о конфигурации из mysql_config.Так, например, выполнение mysql_config --cflags дает флаги компилятора C.В моем случае он испустил -I/usr/local/Cellar/mysql/5.5.12/include -g.При отсутствии флага -arch неверная архитектура становится целью.Кроме того, архитектура связывания (в этом установочном файле) также получена из mysql_config --cflags, поэтому связывание будет нацелено на неправильную архитектуру.

Задание архитектуры явно с помощью ARCHFLAGS помогает.В следующем сценарии предполагается, что используемые вами сборки MySQL и python соответствуют архитектуре вашей машины, что возвращается uname -m;если нет, укажите это явно.

[user]$ sudo su
[root]$ export ARCHFLAGS="-arch $(uname -m)" # or '-arch i386' or '-arch x86_64'
[root]$ pip install mysql-python
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...