使用Cython将模块移植到Python 3.1
在Cython中,是否可以导入任意模块,将它们编译成共享对象文件,然后在Python 3.1中使用?
这样做的原因是,我正在为“blender”这个程序编写一个扩展,而它内部使用的是Python 3.1的解释器。但我也想使用一些还没有移植到3.x版本的Python模块。
我特别想提到的是numpy(还有其他一些库)。我有一个模块是依赖于numpy的。因为我想重新分发这个模块,所以我不希望用户在他们的机器上安装numpy。这样做可行吗?
2 个回答
-2
查看一下你的Python文档,里面有一部分叫“Python/C API参考手册”,详细介绍了怎么做。
编辑: 你想做的是把一个2.x版本的库移植到3.x版本。这是一项很大的工作。 如果你希望的解决方案存在,那Python 2.x早就应该被淘汰了。 当然,有一个叫2to3的工具。但用C语言写的Python库不能用这个工具直接转换。
所以,你可以按照“Python/C API参考手册”里的说明把这个库移植到3.x,或者你也可以选择等一等。
4
原则上,我觉得这是可能的。Cython的工作原理是把类似Python的代码转换成C语言代码。这段代码可以编译成适用于Python 2或Python 3的版本(它使用C预处理器语句来决定使用哪段代码)。
坏消息是,这种方法只适用于用类似Python的代码写的扩展,而Cython能够转换的那些。也就是说,你不能用Cython来处理用C语言写的扩展,比如Numpy。
好消息是,至少对于Numpy来说,你其实不需要这样做。自从1.5版本开始,Numpy就支持Python 3了。Windows上有现成的二进制文件可以使用;在其他系统上,你可能需要自己研究一下如何编译代码。