Python 2.6.1, paket pycrypto 2.3 pypi: “Broken Pipe” saat build

11

Saya mencoba menginstal Fabric, yang membutuhkan pycrypto. Selama membangun untuk pycrypto saya selalu menerima kesalahan "Pipa Rusak". Saya tidak tahu harus mulai dari mana memperbaiki masalah.

Saya menjalankan Mac OS X Snow Leopard 10.6.6, semua pembaruan diinstal; Python 2.6.1; GCC 4.2; XCode 4 (dalam kasus yang memperbarui GCC)

Kesalahan sebenarnya adalah:

$ 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
sumber
1
Nah, masalahnya adalah mencoba membangun biner PPC. Di baris gcc, ada "-arch ppc", yang akan menyebabkannya. Tidak tahu bagaimana cara memperbaikinya.
Tony Arkles

Jawaban:

15

Ini adalah solusi yang lebih baik yang berfungsi untuk semua pengembangan ekstensi Python C pada SEMUA versi Python pada Mac OS X 10.6 menggunakan XCode 4.

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

Dengan cara ini Anda tidak perlu berkutat dengan semua setup.pyfile untuk semua ekstensi C yang Anda coba bangun.

YH Wong
sumber
Luar biasa, terima kasih, memasukkan ini ke dalam ~/.zshrc.
roguesys
Pastikan Anda sudo ini
Jon
@ Jon. Itu tergantung. Anda dapat menginstal paket Python secara lokal di direktori home Anda sendiri.
YH Wong
2

Seperti yang ditunjukkan Tony, masalahnya adalah terkait PPC. XCode 4 menghapus assembler PPC. Alat pengaturan mencoba menginstal untuk semua arsitektur secara default, i386, ppc dan x86_64.

Saya menambahkan kode ini ke setup.py pycrypto-2.3 saya di baris 122 dan berikut. Ini mencari opsi kompilator set untuk 'ppc' dan menghapusnya dan instruksi '-arch' sebelumnya.

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

Menjalankan sudo python setup.py menginstal pada file yang dimodifikasi menginstal pycrypto tanpa masalah.

Ini adalah solusi yang mengerikan, tetapi harus bekerja untuk saat ini hingga setuptools dapat mendeteksi dengan lebih baik bahwa 10.6 dengan XCode 4 tidak lagi memiliki PPC sebagai arsitektur target yang berlaku. Saran untuk memperbaiki masalah ini diterima semua.

jlindenbaum
sumber
Ada solusi yang lebih baik. Petunjuk dapat ditemukan di bawah /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Pilihan lain adalah menyalin kembali perakit ppc dari versi xcode sebelumnya. Anda hanya perlu menyalin folder ppc dan ppc64 dari lokasi/usr/libexec/gcc/darwin/

Saya menyadari bahwa itu juga merupakan solusi yang mengerikan, tetapi itu berhasil bagi saya!

Marcelo Guinea
sumber