Python 2.6.1,pycrypto 2.3 pypi 包:构建期间出现“管道断裂”

Python 2.6.1,pycrypto 2.3 pypi 包:构建期间出现“管道断裂”

我正在尝试安装 Fabric,它需要 pycrypto。在构建 pycrypto 期间,我总是收到“管道损坏”错误。我不知道从哪里开始修复这个问题。

我正在运行 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

这是一个更好的解决方案,适用于所有基于 Python C 扩展的构建全部Mac OS X 10.6 上使用 XCode 4 的 Python 版本。

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

setup.py这样,您就不必为您尝试构建的所有 C 扩展的文件而烦恼。

答案2

正如 Tony 指出的那样,该问题与 PPC 有关。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 install 安装的 pycrypto 没有任何问题。

这是一个糟糕的解决方法,但目前应该可以工作,直到 setuptools 能够更好地检测到 XCode 4 的 10.6 不再将 PPC 作为适用的目标架构。我们接受解决此问题的建议。

答案3

另一个选择是从以前版本的 xcode 复制回 ppc 汇编程序。您只需从以下位置复制文件夹 ppc 和 ppc64/usr/libexec/gcc/darwin/

我认识到这也是一个糟糕的解决方法,但它对我来说确实有效!

相关内容