Python 2.6.1, pakiet pycrypto 2.3 pypi: „Broken Pipe” podczas kompilacji

11

Próbuję zainstalować Fabric, który wymaga pycrypto. Podczas kompilacji pycrypto zawsze pojawia się błąd „Broken Pipe”. Nie wiem od czego zacząć, aby rozwiązać problem.

Korzystam z systemu Mac OS X Snow Leopard 10.6.6, wszystkie zainstalowane aktualizacje; Python 2.6.1; GCC 4.2; XCode 4 (w przypadku aktualizacji GCC)

Dokładny błąd to:

$ 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
źródło
1
Problem polega na tym, że próbuje zbudować plik binarny PPC. W linii gcc ma „-arch ppc”, co może być przyczyną. Nie mam pojęcia, jak to naprawić.
Tony Arkles,

Odpowiedzi:

15

Jest to lepsze rozwiązanie, które działa we wszystkich rozszerzeniach języka Python C we WSZYSTKICH wersjach języka Python w systemie Mac OS X 10.6 przy użyciu XCode 4.

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

W ten sposób nie musisz grzebać w setup.pyplikach dla wszystkich rozszerzeń C, które próbujesz zbudować.

YH Wong
źródło
Doskonale, dzięki, włożyłem to w moje ~/.zshrc.
roguesys 30.03.11
Upewnij się, że to sudo
Jon
@Jon. To zależy. Możesz zainstalować pakiety Pythona lokalnie we własnym katalogu domowym.
YH Wong
2

Jak zauważył Tony, problem dotyczy PPC. XCode 4 usunął asembler PPC. Narzędzia instalacyjne domyślnie próbują zainstalować dla wszystkich architektur, i386, ppc i x86_64.

Dodałem ten kod do mojego pycrypto-2.3 setup.py w linii 122 i kolejnych. Przeszukuje ustawione opcje kompilatora pod kątem „ppc” i usuwa je oraz poprzednią instrukcję „-arch”.

    # 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]

Uruchamianie zwykłej instalacji sudo python setup.py na zmodyfikowanym pliku pycrypto bez problemu.

Jest to okropne obejście, ale powinno działać na razie, dopóki setuptools nie będą w stanie lepiej wykryć, że 10.6 z XCode 4 nie ma już PPC jako odpowiedniej architektury docelowej. Sugestie rozwiązania tego problemu są akceptowane.

jlindenbaum
źródło
Jest lepsze rozwiązanie. Podpowiedź można znaleźć w /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Inną opcją jest skopiowanie asemblerów ppc z poprzedniej wersji xcode. Musisz tylko skopiować foldery ppc i ppc64 z lokalizacji/usr/libexec/gcc/darwin/

Rozumiem, że to również okropne obejście, ale zadziałało dla mnie!

Marcelo Gwinea
źródło