Python 2.6.1, paquet pypi pycrypto 2.3: «Broken Pipe» pendant la construction

11

J'essaie d'installer Fabric, qui nécessite pycrypto. Pendant la construction de pycrypto, je reçois toujours une erreur "Broken Pipe". Je ne sais pas par où commencer pour résoudre le problème.

J'utilise Mac OS X Snow Leopard 10.6.6, toutes les mises à jour installées; Python 2.6.1; GCC 4.2; XCode 4 (dans le cas où GCC mis à jour)

L'erreur exacte est:

$ 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
la source
1
Eh bien, le problème est qu'il essaie de construire un binaire PPC. Dans la ligne gcc, il a "-arch ppc", ce qui serait à l'origine de cela. Je ne sais pas comment y remédier.
Tony Arkles

Réponses:

15

Il s'agit d'une meilleure solution qui fonctionne pour toutes les extensions Python C s'appuyant sur TOUTES les versions Python sur Mac OS X 10.6 utilisant XCode 4.

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

De cette façon, vous n'avez pas à fouiner avec les setup.pyfichiers de toutes les extensions C que vous essayez de créer.

YH Wong
la source
Excellent, merci, collé cela dans mon ~/.zshrc.
roguesys
Assurez-vous que vous sudo ceci
Jon
@Jon. Ça dépend. Vous pouvez installer les packages Python localement sur votre propre répertoire personnel.
YH Wong
2

Comme Tony l'a souligné, le problème est lié au PPC. XCode 4 a supprimé l'assembleur PPC. Les outils d'installation essaient de s'installer pour toutes les architectures par défaut, i386, ppc et x86_64.

J'ai ajouté ce code à mon setup.py pycrypto-2.3 à la ligne 122 et suivantes. Cela recherche les options du compilateur définies pour «ppc» et le supprime ainsi que l'instruction «-arch» précédente.

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

L'exécution de l'installation habituelle de sudo python setup.py sur le fichier modifié installé pycrypto sans problème.

C'est une solution de contournement terrible, mais devrait fonctionner pour l'instant jusqu'à ce que setuptools puisse mieux détecter que 10.6 avec XCode 4 n'a plus PPC comme architecture cible applicable. Les suggestions pour résoudre ce problème par dessus tout sont acceptées.

jlindenbaum
la source
Il y a une meilleure solution. L'astuce peut être trouvée sous /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Une autre option consiste à recopier les assembleurs ppc d'une version précédente de xcode. Il suffit de copier les dossiers ppc et ppc64 depuis l'emplacement/usr/libexec/gcc/darwin/

Je reconnais que c'est aussi une solution de contournement terrible, mais cela a fonctionné pour moi!

Marcelo Guinée
la source