Python 2.6.1, pycrypto 2.3 pypi-Paket: "Broken Pipe" während des Builds

11

Ich versuche, Fabric zu installieren, für das Pycrypto erforderlich ist. Während des Builds für pycrypto erhalte ich immer den Fehler "Broken Pipe". Ich weiß nicht, wo ich anfangen soll, um das Problem zu beheben.

Ich verwende Mac OS X Snow Leopard 10.6.6, alle Updates installiert; Python 2.6.1; GCC 4.2; XCode 4 (falls das GCC aktualisiert wurde)

Der genaue Fehler ist:

$ 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
quelle
1
Das Problem ist, dass versucht wird, eine PPC-Binärdatei zu erstellen. In der gcc-Zeile hat es "-arch ppc", was es verursachen würde. Keine Ahnung, wie man das Problem behebt.
Tony Arkles

Antworten:

15

Dies ist eine bessere Lösung, die für alle Python C-Erweiterungen funktioniert, die auf ALLEN Python-Versionen unter Mac OS X 10.6 mit XCode 4 basieren.

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

Auf diese Weise müssen Sie nicht mit den setup.pyDateien für alle C-Erweiterungen herumspielen, die Sie erstellen möchten.

YH Wong
quelle
Ausgezeichnet, danke, steckte das in meine ~/.zshrc.
Roguesys
Stellen Sie sicher, dass Sie dies sudo
Jon
@ Jon. Das hängt davon ab. Sie können Python-Pakete lokal in Ihrem eigenen Home-Verzeichnis installieren.
YH Wong
2

Wie Tony betonte, hängt das Problem mit PPC zusammen. XCode 4 hat den PPC-Assembler entfernt. Setup-Tools versuchen, standardmäßig für alle Architekturen i386, ppc und x86_64 zu installieren.

Ich habe diesen Code zu meiner pycrypto-2.3 setup.py in Zeile 122 und folgenden hinzugefügt. Dies durchsucht die Set-Compiler-Optionen nach 'ppc' und entfernt sie und die vorhergehende '-arch'-Anweisung'.

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

Ausführen der üblichen sudo python setup.py Installation auf der geänderten Datei installiert pycrypto ohne Probleme.

Dies ist eine schreckliche Problemumgehung, sollte aber vorerst funktionieren, bis setuptools besser erkennen kann, dass 10.6 mit XCode 4 nicht mehr über PPC als anwendbare Zielarchitektur verfügt. Vorschläge zur Behebung dieses Problems werden akzeptiert.

jlindenbaum
quelle
Es gibt eine bessere Lösung. Der Hinweis kann unter /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Eine andere Möglichkeit besteht darin, die ppc-Assembler von einer früheren Version von xcode zurück zu kopieren. Sie müssen nur die Ordner ppc und ppc64 vom Speicherort kopieren/usr/libexec/gcc/darwin/

Ich erkenne, dass dies auch eine schreckliche Problemumgehung ist, aber es hat bei mir funktioniert!

Marcelo Guinea
quelle