2009-12-02 3 views
1

Я помню, как устанавливал Python + Django + MySQL + MySQLdb на моем 32-битном Mac с Leopard 10.5.7. Я пробовал такую ​​же процедуру с Mac Snow Leopard. Но, к сожалению, натолкнулся на множество ошибок ... Я не знаю, но что-то странное происходит. Пожалуйста, смотрите журнал ошибок:mysqldb build error

Amit-Vermas-MacBook:mysql-python-1.2.2 amitverma$ python setup.py build 
running build 
running build_py 
copying MySQLdb/release.py -> build/lib.macosx-10.3-i386-2.5/MySQLdb 
running build_ext 
building '_mysql' extension 
creating build/temp.macosx-10.3-i386-2.5 
gcc-4.0 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -fno-common -dynamic -DNDEBUG -g -O3 -Dversion_info=(1,2,2,'final',0) -D__version__=1.2.2 -I/usr/local/mysql/include -I/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5 -c _mysql.c -o build/temp.macosx-10.3-i386-2.5/_mysql.o -g -Os -arch x86_64 -fno-common -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -DDONT_DECLARE_CXA_PURE_VIRTUAL 
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:57, 
       from pymemcompat.h:10, 
       from _mysql.c:29: 
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyport.h:761:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." 
In file included from _mysql.c:35: 
/usr/local/mysql/include/my_config.h:1050:1: warning: "HAVE_WCSCOLL" redefined 
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8, 
       from pymemcompat.h:10, 
       from _mysql.c:29: 
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:721:1: warning: this is the location of the previous definition 
In file included from _mysql.c:35: 
/usr/local/mysql/include/my_config.h:1168:1: warning: "SIZEOF_LONG" redefined 
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8, 
       from pymemcompat.h:10, 
       from _mysql.c:29: 
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:811:1: warning: this is the location of the previous definition 
In file included from _mysql.c:35: 
/usr/local/mysql/include/my_config.h:1177:1: warning: "SIZEOF_PTHREAD_T" redefined 
In file included from /Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/Python.h:8, 
       from pymemcompat.h:10, 
       from _mysql.c:29: 
/Library/Frameworks/Python.framework/Versions/2.5/include/python2.5/pyconfig.h:820:1: warning: this is the location of the previous definition 
error: command 'gcc-4.0' failed with exit status 1 
Amit-Vermas-MacBook:mysql-python-1.2.2 amitverma$ 
+0

Запр.при Serverfault, сестра сайт SO: HTTP: // serverfault.com/ –

+2

nope. это вопрос программирования. Программисты чаще знают эти проблемы, чем системные администраторы. –

ответ

0

Следующий блог помог мне собрать MySQLDb 1.2.2 на Mac: http://www.mangoorange.com/2008/08/01/installing-python-mysqldb-122-on-mac-os-x/

Однако позже я попытался MySQLDb 1.2.3c1 и не было любые проблемы компилируются из коробки. 1.2.2 - это несколько лет и вызывает предупреждения об устаревании на Python 2.6. Я бы просто переключился на 1.2.3.c1 и посмотрел, работает ли это для вас.

1.2.3c1 - это последняя версия PyPi.

1

Это мое личное правило Makefile для этого

MYSQLDB_VERSION=1.2.3c1 
MYSQLDB_TARGET=$(BUILD_FLAGS_DIR)/mysqldb 
MYSQLDB_PACKAGE=MySQL-python-$(MYSQLDB_VERSION).tar.gz 
MYSQLDB_PACKAGE_URL=http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/$(MYSQLDB_VERSION)/$(MYSQLDB_PACKAGE) 

.PHONY: mysqldb mysqldb-download 
mysqldb: $(MYSQLDB_TARGET) 
mysqldb-download: $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE) 

$(MYSQLDB_TARGET): $(INIT_TARGET) $(MYSQLDB_DEPS) $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE) 
    -rm -rf $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION) 
    tar -m -C $(UNPACK_DIR) -xzvf $(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE) 
    -cd $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION); \ 
    for patch in $(PATCH_DIR)/mysqldb-$(MYSQLDB_VERSION)_$(ARCH)_*; \ 
     do patch -p1 < $$patch; \ 
    done 
    cd $(UNPACK_DIR)/MySQL-python-$(MYSQLDB_VERSION); export CC="gcc -m64" FC="g95 -m64" CPPFLAGS="-I$(RUNTIME_DIR)/include" CFLAGS="-m64 -I$(RUNTIME_DIR)/include" LD_LIBRARY_PATH=$(RUNTIME_DIR)/lib64:$(RUNTIME_DIR)/lib:$$LD_LIBRARY_PATH PATH=$(RUNTIME_DIR)/bin:$$PATH PYTHONPATH=$(RUNTIME_DIR)/lib/python2.5/site-packages/; $(RUNTIME_DIR)/bin/python2.5 setup.py install --prefix=$(RUNTIME_DIR) 
    touch $(MYSQLDB_TARGET) 

$(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE): 
    for package in $(MYSQLDB_PACKAGE_URL); \ 
    do \ 
     echo -n "Downloading $$package... "; \ 
     cd $(DOWNLOAD_DIR); curl -L -O $$package; \ 
     echo "done"; \ 
    done 
    touch [email protected] 

ALL_RUNTIME_TARGETS+=$(MYSQLDB_TARGET) 
ALL_DOWNLOAD_TARGETS+=$(DOWNLOAD_DIR)/$(MYSQLDB_PACKAGE) 

И патч

$ more mysqldb-1.2.3c1_x86_64-apple-darwin10_patch-000 
diff -Naur MySQL-python-1.2.3c1/setup.py MySQL-python-1.2.3c1.new/setup.py 
--- MySQL-python-1.2.3c1/setup.py  2008-10-18 02:12:31.000000000 +0200 
+++ MySQL-python-1.2.3c1.new/setup.py 2009-10-08 22:59:05.000000000 +0200 
@@ -13,6 +13,8 @@ 
    from setup_windows import get_config 

metadata, options = get_config() 
+options["extra_compile_args"].remove("-arch") 
+options["extra_compile_args"].remove("x86_64") 
metadata['ext_modules'] = [Extension(sources=['_mysql.c'], **options)] 
metadata['long_description'] = metadata['long_description'].replace(r'\n', '') 
setup(**metadata) 

И это работает для меня. Я не могу гарантировать, но ... возможно, вы найдете в нем какой-то интересный намек.

Пожалуйста, обратите внимание, что я использую пользовательский встроенный компилятор (для устаревших причин слишком уродливым, чтобы вникать в)

+0

эй стефано. я боюсь, что это все греческие для меня. Я нахожусь на довольно зарождающейся стадии, и вышеупомянутые слова просто пугают меня. Я успешно сделал это на своем предыдущем 10.5.7 Mac. Теперь, когда у меня есть 10.6 Snow Leopard, жизнь превращается в ад. Я думаю, что это связано с 64-битной вещью. – amit

1

Наиболее вероятным объяснением является то, что вы пытаетесь связать 64-битную версию библиотек MySQL в с 32-битная версия Python (в настоящее время все инсталляторы python.org для OS X только 32-разрядные). (Вы можете проверить, что с помощью команды file в файлах библиотеки в /usr/local/mysql/).

Некоторые решения:

  • Используйте Apple, поставляемые python2.6 на Snow Leopard, который является 64-битный

  • установить 32-разрядную версию библиотеки MySQL с

  • установить полное решение с использованием MacPorts: install the base MacPorts infrastructure, а затем установить MySQLdb adapter for python 2.6 (или 2.5), в котором также будут установлены все не включенные в другие категории обходимы зависимости, включая новую питона и клиентские библиотеки MySQL, которые должны работать все вместе правильно (и быть состояния обновляться по MacPorts):

    sudo port install py26-mysql # or py25-mysql

Для использования MySQL с питоном на OS X, я рекомендуйте последнее решение, то есть, если вам действительно не нравится, и у вас есть время для управления пакетами и установки. Вероятно, это сэкономит вам массу неприятностей в долгосрочной перспективе.

P.S.MacPorts включает в себя порты django и PIL, а также:

sudo port install py26-django py26-pil 

EDIT:

Для перехода на MacPorts маршрут, следуйте инструкциям, которые я дал here удалить эффекты python.org инсталлятора питона. НЕ пытайтесь удалить или изменить установленные Python-файлы Apple в /usr/bin или /System/Library; они входят в состав OS X. Затем следуйте приведенным выше инструкциям, чтобы установить MacPorts. Чтобы избежать помех установкам Apple или сторонних разработчиков, MacPorts устанавливает все свои файлы в полностью отдельную структуру каталогов, корневую в /opt/local. Таким образом, вам необходимо будет изменить .bash_profile, чтобы добавить /opt/local/bin в ваш $PATH. Если вы хотите, MacPorts версии можно найти первый, добавить что-то вроде:

export PATH="/opt/local/bin:${PATH}" 

При запуске нового сеанса терминала, вы должны найти MacPorts python2.6 на python2.6. Если вы хотите, чтобы сделать команду python точку там:

$ sudo port install python_select 
$ sudo python_select -l 
Available versions: 
current none python26 python26-apple 
$ sudo python_select python26 
+0

Я изначально установил 32-битную версию MySQL. он не работал. то я переключился на 64-битные. в процессе я переключился с python 2.5.4 на 2.6.4 и все между ними :) это действительно смутило меня и моего mac. но я думаю, что у вас есть точка здесь. теперь я хочу сделать чистую переустановку. есть ли способ удалить все версии python, установленные в системе, а затем выполнить переустановку? – amit

0

Похоже, что вам нужно переустановить/обновить XCode (инструменты для сборки)