Construir Python usando una versión incorrecta de GCC en OS X

Estoy tratando de construir el paquete pythypto de python. OS X tiene gcc-4.2 instalado y no gcc-4.0, pero Python sigue intentando usar gcc-4.0. ¿Cómo puedo hacer que use gcc-4.2? O debería hacer esto de una manera diferente.

Estoy teniendo el siguiente error:

bash-3.2$ bash-3.2$ sudo python setup.py build running build running build_py running build_ext warning: GMP library not found; Not building Crypto.PublicKey._fastmath. building 'Crypto.Hash.MD2' extension gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch ppc -arch i386 -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/MD2.c -o build/temp.macosx-10.3-fat-2.6/src/MD2.o unable to execute gcc-4.0: No such file or directory error: command 'gcc-4.0' failed with exit status 1 bash-3.2$ bash-3.2$ bash-3.2$ 

Estoy usando Mac OS X 10.6.7 con python 2.6.6 y XCode está instalado.

EDITAR: Si agrego CC = gcc-4.2, entonces sigo recibiendo el error:

 bash-3.2$ bash-3.2$ export CC=gcc-4.2 bash-3.2$ python setup.py build running build running build_py running build_ext warning: GMP library not found; Not building Crypto.PublicKey._fastmath. building 'Crypto.Hash.MD2' extension gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -std=c99 -O3 -fomit-frame-pointer -arch i386 -arch x86_64 -Isrc/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/MD2.c -o build/temp.macosx-10.3-intel-2.6/src/MD2.o gcc-4.0 -g -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 build/temp.macosx-10.3-intel-2.6/src/MD2.o -o build/lib.macosx-10.3-intel-2.6/Crypto/Hash/MD2.so unable to execute gcc-4.0: No such file or directory error: command 'gcc-4.0' failed with exit status 1 bash-3.2$ 

EDITAR: Parece que usar sudo hace una diferencia aquí.

Intenté usar tanto CC como CXX como lo sugirió Adam, y obtengo el siguiente error sin sudo:

 bash-3.2$ python setup.py build running build running build_py creating build/lib.macosx-10.3-fat-2.6 creating build/lib.macosx-10.3-fat-2.6/Crypto copying lib/Crypto/__init__.py -> build/lib.macosx-10.3-fat-2.6/Crypto copying lib/Crypto/pct_warnings.py -> build/lib.macosx-10.3-fat-2.6/Crypto ... warning: GMP library not found; Not building Crypto.PublicKey._fastmath. building 'Crypto.Hash.MD2' extension creating build/temp.macosx-10.3-fat-2.6 creating build/temp.macosx-10.3-fat-2.6/src gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -arch ppc -arch i386 -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/MD2.c -o build/temp.macosx-10.3-fat-2.6/src/MD2.o /usr/libexec/gcc/powerpc-apple-darwin10/4.2.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed Installed assemblers are: /usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64 /usr/bin/../libexec/gcc/darwin/i386/as for architecture i386 lipo: can't open input file: /var/tmp//ccxan625.out (No such file or directory) error: command 'gcc-4.2' failed with exit status 1 

Si uso sudo, obtengo el siguiente error cuando intenta usar 4.0:

 bash-3.2$ sudo python setup.py build Password: running build running build_py running build_ext warning: GMP library not found; Not building Crypto.PublicKey._fastmath. building 'Crypto.Hash.MD2' extension gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch ppc -arch i386 -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/MD2.c -o build/temp.macosx-10.3-fat-2.6/src/MD2.o unable to execute gcc-4.0: No such file or directory error: command 'gcc-4.0' failed with exit status 1 bash-3.2$ bash-3.2$ 

¿Esta información adicional hace que sea más obvio lo que está pasando y cómo solucionarlo? ¿Alguna idea de por qué la llamada sin sudo está recibiendo ese otro error?

Related of "Construir Python usando una versión incorrecta de GCC en OS X"

Según la ruta que se muestra ( /Library/Frameworks/Python.framework/Versions/2.6 ), parece que ha instalado un Python 2.6 de 32 bits, tal vez utilizando un instalador de python.org. Cuando construyes un paquete de Python que incluye un módulo de extensión C, los Distutils de Python incluidos con esa instancia de Python intentarán usar la misma versión de gcc y las mismas architectures de CPU con las que fue construido Python. Aparentemente, ha instalado el nuevo Xcode 4 de vanguardia que ya no incluye el soporte gcc-4.0 o ppc. Las versiones de Python que está utilizando se crearon con las herramientas Xcode 3 incluidas con Mac OS X 10.6. Es posible que pueda evitarlo al anular la opción del comstackdor con:

 export CC=gcc-4.2 python setup.py build sudo python setup.py install 

EDITAR:

Parece que eso no va a funcionar para pycrypto ; Su comstackción es demasiado compex. Si no te importa usar el Python 2.6 provisto por Apple en OS X 10.6, esto debería funcionar:

 export ARCHFLAGS='-arch i386 -arch x86_64' /usr/bin/python2.6 setup.py build 

Otra opción sería instalar el instalador Python 2.7 de 64 bits / 32 bits desde python.org . Está construido con gcc-4.2 y es solo para Intel, por lo que no debería haber ningún problema al usarlo con Xcode 4.

ACTUALIZAR:

Aquí están los pasos exactos que usé con Xcode 3. También deberían funcionar con Xcode 4 instalado:

 $ mkdir p $ cd p $ curl -O http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.3.tar.gz $ tar xf pycrypto-2.3.tar.gz $ cd pycrypto-2.3/ $ export ARCHFLAGS='-arch i386 -arch x86_64' $ /usr/bin/python2.6 setup.py build running build running build_py creating build creating build/lib.macosx-10.6-universal-2.6 creating build/lib.macosx-10.6-universal-2.6/Crypto copying lib/Crypto/__init__.py -> build/lib.macosx-10.6-universal-2.6/Crypto [...] running build_ext warning: GMP library not found; Not building Crypto.PublicKey._fastmath. building 'Crypto.Hash.MD2' extension creating build/temp.macosx-10.6-universal-2.6 creating build/temp.macosx-10.6-universal-2.6/src gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -fwrapv -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -std=c99 -O3 -fomit-frame-pointer -arch i386 -arch x86_64 -Isrc/ -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/MD2.c -o build/temp.macosx-10.6-universal-2.6/src/MD2.o gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 build/temp.macosx-10.6-universal-2.6/src/MD2.o -o build/lib.macosx-10.6-universal-2.6/Crypto/Hash/MD2.so [...] building 'Crypto.Util._counter' extension gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -fwrapv -Wall -Wstrict-prototypes -DENABLE_DTRACE -pipe -std=c99 -O3 -fomit-frame-pointer -arch i386 -arch x86_64 -Isrc/ -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c src/_counter.c -o build/temp.macosx-10.6-universal-2.6/src/_counter.o gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup -arch i386 -arch x86_64 build/temp.macosx-10.6-universal-2.6/src/_counter.o -o build/lib.macosx-10.6-universal-2.6/Crypto/Util/_counter.so $ /usr/bin/python2.6 setup.py install running install running build running build_py running build_ext warning: GMP library not found; Not building Crypto.PublicKey._fastmath. running install_lib creating /Library/Python/2.6/site-packages/Crypto [...] byte-compiling /Library/Python/2.6/site-packages/Crypto/pct_warnings.py to pct_warnings.pyc running install_egg_info Writing /Library/Python/2.6/site-packages/pycrypto-2.3-py2.6.egg-info $ /usr/bin/python2.6 setup.py test running test ............................................................................................[...] ---------------------------------------------------------------------- Ran 902 tests in 42.612s OK $ cd $ /usr/bin/python2.6 Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from Crypto.Hash import MD5 >>> m = MD5.new() >>> m.update('abc') >>> m.digest() '\x90\x01P\x98<\xd2O\xb0\xd6\x96?}(\xe1\x7fr' >>> m.hexdigest() '900150983cd24fb0d6963f7d28e17f72' >>> ^D 

Por cierto, este es un problema de distutils , Python en sí no comstack nada.

Como ha descubierto, puede anular el comstackdor con la variable de entorno CC . Puede anular el enlazador utilizado con la variable de entorno CXX . También me gustaría saber por qué distutils actúa de esta manera, pero lo hace.

Enfócate en este error:

 unable to execute gcc-4.0: No such file or directory error: command 'gcc-4.0' failed with exit status 1 

El comstackdor te está diciendo EXACTAMENTE cuál es el problema. gcc-4.0 (y gcc-4.2 ) no está en su PATH . SUGERENCIA: which gcc-4.2 , por ejemplo:

 % which gcc-4.2 /usr/bin/gcc-4.2 

Suponiendo que el suyo esté en la misma ubicación, no estoy seguro de por qué /usr/bin no está en su PATH , ¡pero ahí lo tienen!

Averigüe cuál es su PATH realidad:

 % echo $PATH /opt/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11:/sw/bin:/sw/sbin 

Fija tu camino y estarás en tu camino hacia la iluminación.