Pacote Python 2.6.1, pycrypto 2.3 pypi: “Broken Pipe” durante a compilação

11

Estou tentando instalar o Fabric, que requer pycrypto. Durante a construção do pycrypto, sempre recebo o erro "Broken Pipe". Não sei por onde começar a corrigir o problema.

Estou executando o Mac OS X Snow Leopard 10.6.6, com todas as atualizações instaladas; Python 2.6.1; GCC 4.2; XCode 4 (no caso de atualização do GCC)

O erro exato é:

$ 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
fonte
1
Bem, o problema é que ele está tentando construir um binário PPC. Na linha gcc, possui "-arch ppc", o que causaria isso. Não faço ideia de como consertar isso.
Tony Arkles

Respostas:

15

Esta é uma solução melhor que funciona para todas as extensões do Python C baseadas em TODAS as versões do Python no Mac OS X 10.6 usando o XCode 4.

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

Dessa forma, você não precisa mexer nos setup.pyarquivos de todas as extensões C que você está tentando criar.

YH Wong
fonte
Excelente, obrigado, enfiou isso no meu ~/.zshrc.
roguesys 30/03
Certifique-se de sudo esta
Jon
@Jon. Depende. Você pode instalar pacotes Python localmente em seu próprio diretório inicial.
YH Wong
2

Como Tony apontou, o problema está relacionado ao PPC. O XCode 4 removeu o montador PPC. As ferramentas de instalação tentam instalar para todas as arquiteturas por padrão, i386, ppc e x86_64.

Eu adicionei esse código ao meu pycrypto-2.3 setup.py na linha 122 e seguintes. Ele pesquisa as opções definidas do compilador para 'ppc' e o remove e a instrução '-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]

A execução da instalação normal do sudo python setup.py no arquivo modificado instalou o pycrypto sem problemas.

Essa é uma solução terrível, mas deve funcionar por enquanto até que as ferramentas de instalação possam detectar melhor que o 10.6 com o XCode 4 não possui mais o PPC como uma arquitetura de destino aplicável. Sugestões para corrigir esse problema acima de tudo são aceitas.

jlindenbaum
fonte
Existe uma solução melhor. A dica pode ser encontrada em /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Outra opção é copiar de volta os montadores ppc de uma versão anterior do xcode. Você só precisa copiar as pastas ppc e ppc64 do local/usr/libexec/gcc/darwin/

Reconheço que também é uma solução terrível, mas funcionou para mim!

Marcelo Guiné
fonte