Python 2.6.1、pycrypto 2.3 pypiパッケージ:ビルド中の「壊れたパイプ」


11

pycryptoを必要とするFabricをインストールしようとしています。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

1
問題は、PPCバイナリを構築しようとしていることです。gcc行には、「-arch ppc」があり、これが原因です。しかし、それを修正する方法がわかりません。
トニーアークルズ

回答:


15

これは、XCode 4を使用するMac OS X 10.6のすべての Pythonバージョンで構築されたすべてのPython C拡張機能で機能する、より優れたソリューションです。

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

このようにsetup.py、構築しようとしているすべてのC拡張機能のファイルをいじる必要はありません。


すばらしい、ありがとう~/.zshrc
roguesys

これをsudoすることを確認してください
ジョン

@ジョン。場合によります。Pythonパッケージは、独自のホームディレクトリにローカルにインストールできます。
YHウォン

2

トニーが指摘したように、この問題はPPC関連です。XCode 4はPPCアセンブラーを削除しました。セットアップツールは、デフォルトですべてのアーキテクチャ(i386、ppc、およびx86_64)のインストールを試みます。

このコードを122行目以降のpycrypto-2.3 setup.pyに追加しました。これは、設定されたコンパイラオプションで「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]

問題なくインストールされたpycryptoを変更したファイルで通常のsudo python setup.pyインストールを実行します。

これはひどい回避策ですが、Xcode 4を使用した10.6が適用可能なターゲットアーキテクチャとしてPPCを持たないことをsetuptoolsがより適切に検出できるようになるまで、今のところ動作するはずです。この問題をすべて修正する提案が受け入れられます。


より良い解決策があります。ヒントは/System/Frameworks/Python.framework/Versions/VERSION/lib/PYTHON_VERSION/distutils/sysconfig.py:customize_compilerの下に見つけることができます
YHウォン

1

もう1つのオプションは、以前のバージョンのxcodeからppcアセンブラーをコピーして戻すことです。フォルダーppcとppc64を場所からコピーするだけです/usr/libexec/gcc/darwin/

これもひどい回避策だと思いますが、うまくいきました!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.