如何在pypy 1.4.1上安装twisted 10.2.0?

3 投票
3 回答
2530 浏览
提问于 2025-04-16 12:34

我在我的Ubuntu系统上安装twisted 10.2.0时遇到了问题。下载了twisted的源代码后,我输入了命令:pypy setup.py install。结果出现了一个错误:

building 'twisted.runner.portmap' extension
creating build/temp.linux-x86_64-2.5
creating build/temp.linux-x86_64-2.5/twisted
creating build/temp.linux-x86_64-2.5/twisted/runner
cc -I/builds/pypy-1.4.1-linux64/include -c twisted/runner/portmap.c -o build/temp.linux-x86_64-2.5/twisted/runner/portmap.o
cc -shared build/temp.linux-x86_64-2.5/twisted/runner/portmap.o -o build/lib.linux-x86_64-2.5/twisted/runner/portmap.pypy-14.so
/usr/bin/ld.bfd.real: build/temp.linux-x86_64-2.5/twisted/runner/portmap.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
build/temp.linux-x86_64-2.5/twisted/runner/portmap.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
error: command 'cc' failed with exit status 1

那么,我该怎么解决这个问题呢?谢谢。

3 个回答

2

目前,Twisted的最新版本可以在PyPy上正常编译(我使用的是1.6.1-dev0)。

不过,要安装Twisted,你需要对zipfile.py应用一个我提交的补丁

因为zipfile.py 2.7.1及以上版本在编写时采用了针对CPython的编程风格,所以它会泄露文件描述符。

因此,在使用不同垃圾回收模型的PyPy上安装时就会失败。

3

你可以通过在setup.py文件的第73行把以下那行代码注释掉,来跳过构建扩展的步骤:

       conditionalExtensions = getExtensions(),

这样做可以避免在文件夹里到处找扩展并尝试去构建它们。

4

这是在twisted构建中出现的一个“问题”。这个问题可能算是个bug,也可能不算。twisted并不认为它的C扩展是可选的,尽管大多数情况下这些扩展并不是必需的。如果你只是把PYTHONPATH指向twisted所在的位置,twisted仍然可以正常工作,只是没有那些C扩展而已。

撰写回答