Python 2.6.1, paquete pycrypto 2.3 pypi: "Broken Pipe" durante la compilación

11

Estoy intentando instalar Fabric, que requiere pycrypto. Durante la compilación de pycrypto siempre recibo un error de "tubería rota". No sé por dónde empezar a solucionar el problema.

Estoy ejecutando Mac OS X Snow Leopard 10.6.6, todas las actualizaciones instaladas; Python 2.6.1; CCG 4.2; XCode 4 (en caso de que haya actualizado GCC)

El error exacto es:

$ 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.2 -fno-strict-aliasing -fno-common -dynamic -fwrapv -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch ppc -arch x86_64 -pipe -std=c99 -O3 -fomit-frame-pointer -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
/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
src/MD2.c:134: fatal error: error writing to -: Broken pipe
compilation terminated.
lipo: can't open input file: /var/tmp//ccfADoXD.out (No such file or directory)
error: command 'gcc-4.2' failed with exit status 1
jlindenbaum
fuente
1
Bueno, el problema es que está tratando de construir un binario PPC. En la línea gcc, tiene "-arch ppc", que lo estaría causando. Sin embargo, no tengo idea de cómo solucionarlo.
Tony Arkles

Respuestas:

15

Esta es una mejor solución que funciona para todas las extensiones de Python C compiladas en TODAS las versiones de Python en Mac OS X 10.6 usando XCode 4.

ARCHFLAGS="-arch i386 -arch x86_64" python setup.py build

De esta manera, no tiene que manipular los setup.pyarchivos de todas las extensiones C que está intentando construir.

YH Wong
fuente
Excelente, gracias, metí esto en mi ~/.zshrc.
roguesys
Asegúrese de sudo esto
Jon
@Jon. Eso depende. Puede instalar paquetes de Python localmente en su propio directorio de inicio.
YH Wong
2

Como Tony señaló, el problema está relacionado con PPC. XCode 4 eliminó el ensamblador PPC. Las herramientas de configuración intentan instalarse para todas las arquitecturas de forma predeterminada, i386, ppc y x86_64.

Agregué este código a mi pycrypto-2.3 setup.py en la línea 122 y siguientes. Esto busca las opciones del compilador establecido para 'ppc' y lo elimina junto con la instrucción '-arch' anterior.

    # removing PPC flag from compiler options
    index = self.compiler.compiler_so.index('ppc')

    del self.compiler.compiler_so[index]
    del self.compiler.compiler_so[index-1]

Ejecutando la instalación habitual de sudo python setup.py en el archivo modificado instalado pycrypto sin ningún problema.

Esta es una solución temporal terrible, pero debería funcionar por ahora hasta que setuptools pueda detectar mejor que 10.6 con XCode 4 ya no tiene PPC como arquitectura de destino aplicable. Se aceptan sugerencias para solucionar este problema en general.

jlindenbaum
fuente
Hay una mejor solución. La sugerencia se puede encontrar en /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Otra opción es copiar los ensambladores ppc de una versión anterior de xcode. Solo tiene que copiar las carpetas ppc y ppc64 desde la ubicación/usr/libexec/gcc/darwin/

Reconozco que también es una solución terrible, ¡pero funcionó para mí!

Marcelo Guinea
fuente