ошибка сборки mysqldb - PullRequest
       21

ошибка сборки mysqldb

1 голос
/ 02 декабря 2009

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

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$ 

Ответы [ 4 ]

1 голос
/ 03 декабря 2009

Это мое личное правило 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 $@

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)

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

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

1 голос
/ 03 декабря 2009

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

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

  • используйте поставляемую Apple python2.6 на Снежный барс 64-битный

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

  • установить полное решение, используя MacPorts: установить базовые MacPorts инфраструктуры , а затем установите адаптер MySQLdb для Python 2.6 (или 2.5 ), который также установит все необходимые зависимости, включая новую клиентские библиотеки Python и MySQL, которые должны работать правильно (и быть возможность обновления MacPorts):

    sudo port install py26-mysql # or py25-mysql

Для использования MySQL с python на OS X я рекомендую последнее решение, если только вы действительно не наслаждаетесь и не располагаете временем для управления пакетами и их установки. Это, вероятно, избавит вас от многих неприятностей в долгосрочной перспективе.

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

sudo port install py26-django py26-pil

EDIT:

Чтобы пройти маршрут MacPorts, следуйте инструкциям, которые я дал здесь , чтобы удалить эффекты Python установщика python.org. НЕ пытайтесь удалять или изменять установленные на Apple файлы Python в /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 голосов
/ 03 декабря 2009

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

0 голосов
/ 03 декабря 2009

Следующий пост в блоге помог мне скомпилировать 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.

...