2009-12-02 8 views
1

Je me souviens avoir installé Python + Django + MySQL + MySQL sur mon Mac 32 bits avec Leopard 10.5.7. J'ai essayé la même procédure avec Mac Snow Leopard. Mais j'ai malheureusement rencontré beaucoup d'erreurs ... Je ne sais pas mais quelque chose d'étrange se passe. S'il vous plaît regarder le journal des erreurs:mysqldb erreur de construction

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

Demandez sur Serverfault, un site jumeau SO: http: // serverfault.com/ –

+2

non. C'est une question de programmation. Les programmeurs sont plus susceptibles de connaître ces problèmes que les administrateurs système. –

Répondre

0

Le blog suivant m'a aidé à compiler MySQLdb 1.2.2 sur Mac: http://www.mangoorange.com/2008/08/01/installing-python-mysqldb-122-on-mac-os-x/

Cependant, plus tard j'ai essayé mysqldb 1.2.3c1 et ne pas tous les problèmes de compilation hors de la boîte. 1.2.2 est vieux de plusieurs années et provoque des avertissements de dépréciation sur Python 2.6. Je voudrais simplement passer à 1.2.3.c1 et voir si cela fonctionne pour vous.

1.2.3c1 est la dernière version sur PyPi.

1

Ceci est ma règle de makefile personnelle pour que

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) 

Et un patch

$ 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) 

Et ça marche pour moi. Je ne peux pas garantir, mais ... peut-être trouverez-vous un indice intéressant à l'intérieur.

S'il vous plaît noter que je suis en utilisant un compilateur construit sur mesure (pour des raisons obsolètes trop laid pour se plonger dans)

+0

hey stefano. J'ai peur que tout cela soit grec. Je suis à un stade assez naissant et les mots ci-dessus ne font que m'effrayer. Je l'ai fait avec succès sur mon Mac 10.5.7 précédente. Maintenant que j'ai 10.6 Snow Leopard, la vie est devenue un enfer. Je pense que cela a à voir avec la chose 64 bits. – amit

1

L'explication la plus probable est que vous essayez de lier une version 64 bits des bibliothèques MySQL avec Version 32 bits de Python (actuellement, tous les programmes d'installation de python.org pour OS X sont en version 32 bits uniquement). (Vous pouvez vérifier cela en utilisant la commande file sur les fichiers de bibliothèque dans /usr/local/mysql/).

Quelques solutions:

  • Utilisez le python2.6 fournis par Apple sur Snow Leopard qui est 64 bits

  • installer une version 32 bits des bibliothèques MySQL

  • installer une solution complète en utilisant MacPorts: install the base MacPorts infrastructure puis installez le MySQLdb adapter for python 2.6 (ou 2.5) qui installera également tous les nca cessaire dépendances y compris un nouveau python et les bibliothèques clientes MySQL qui doit travailler ensemble correctement (et être pouvant être mis à jour par MacPorts):

    sudo port install py26-mysql # or py25-mysql

Pour utiliser MySQL avec python sur OS X, je recommandez la dernière solution, c'est-à-dire, sauf si vous appréciez vraiment et avez le temps de faire la gestion et l'installation du paquet. Cela vous épargnera probablement beaucoup de problèmes à long terme.

P.S.MacPorts comprend les ports de django et PIL ainsi:

sudo port install py26-django py26-pil 

EDIT:

Pour aller la route MacPorts, suivez les instructions que je donnai here pour éliminer les effets d'un python d'installation python.org. NE tentez PAS de supprimer ou de modifier les fichiers Python installés par Apple au /usr/bin ou au /System/Library; ils font partie de OS X. Suivez ensuite les instructions ci-dessus pour installer MacPorts. Afin d'éviter toute interférence avec les installations d'Apple ou d'une tierce partie, MacPorts installe tous ses fichiers dans une structure de répertoires complètement distincte portant le numéro /opt/local. Ainsi, vous devrez modifier votre .bash_profile pour ajouter /opt/local/bin à votre $PATH. Si vous voulez les ajouter quelque chose comme MacPorts versions se trouvent d'abord,:

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

Lorsque vous démarrez une nouvelle session de terminal, vous devriez trouver le MacPorts python2.6 à python2.6. Si vous souhaitez également faire la commande python point de là:

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

J'ai initialement installé la version 32 bits de MySQL. ça n'a pas marché. alors je suis passé à ceux de 64 bits. Dans le processus, je suis passé de Python 2.5.4 à 2.6.4 et tout le reste entre :) cela m'a vraiment confondu avec mon mac. mais je pense que vous avez un point ici. Maintenant, je veux faire une nouvelle installation. est-il un moyen de supprimer toutes les versions de python installé sur le système, puis faire une ré-installation? – amit

0

Il semble que vous devez réinstaller/mettre à jour XCode (build outils)