Python 2.6.1, пакет pycrypto 2.3 pypi: «Сломанная труба» во время сборки

11

Я пытаюсь установить Fabric, для которой требуется pycrypto. Во время сборки для pycrypto я всегда получаю ошибку "Broken Pipe". Я не знаю, с чего начать, чтобы решить проблему.

Я использую Mac OS X Snow Leopard 10.6.6, все обновления установлены; Python 2.6.1; GCC 4.2; XCode 4 (в случае обновления GCC)

Точная ошибка:

$ 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
источник
1
Ну, проблема в том, что он пытается создать двоичный файл PPC. В строке gcc есть "-arch ppc", которая его вызывает. Не знаю, как это исправить, хотя.
Тони Арклес

Ответы:

15

Это лучшее решение, которое работает для всех расширений Python C на всех версиях Python в Mac OS X 10.6 с использованием XCode 4.

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

Таким образом, вам не нужно копаться в setup.pyфайлах для всех расширений C, которые вы пытаетесь создать.

YH Вонг
источник
Отлично, спасибо, воткнул это в мой ~/.zshrc.
roguesys
Убедитесь, что вы sudo это
Джон
@ Джон. Это зависит. Вы можете установить пакеты Python локально в своем домашнем каталоге.
YH Вонг
2

Как отметил Тони, проблема связана с КПП. XCode 4 убрал ассемблер PPC. Программа установки пытается установить все архитектуры по умолчанию: i386, ppc и x86_64.

Я добавил этот код в мой pycrypto-2.3 setup.py в строке 122 и далее. Он ищет в параметрах компилятора «ppc» и удаляет его и предшествующую инструкцию «-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]

Запуск обычной установки sudo python setup.py на измененный файл, установленный pycrypto, без проблем.

Это ужасный обходной путь, но он должен работать до тех пор, пока setuptools не сможет лучше обнаружить, что 10.6 с XCode 4 больше не имеет PPC в качестве применимой целевой архитектуры. Предложения по устранению этой проблемы принимаются.

jlindenbaum
источник
Есть лучшее решение. Подсказка может быть найдена в /System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compiler
YH Wong
1

Другой вариант - скопировать обратно ppc-ассемблеры из предыдущей версии xcode. Вам нужно только скопировать папки ppc и ppc64 из папки/usr/libexec/gcc/darwin/

Я понимаю, что это тоже ужасный обходной путь, но он сработал для меня!

Марсело Гвинея
источник