是否可以在 cython 中导入任意模块,将它们编译为共享对象文件,然后在 python 3.1 中使用它们?
这样做的原因是,我正在为程序“blender”编写一个扩展,它有一个内部 python 3.1 解释器。但我也想使用一些尚未移植到 3.x 的 python 模块
我特别想到了 numpy(还有其他一些库)。我有一个模块,它使用 numpy. 由于我想重新分发该模块,我不希望人们在他们的机器上安装 numpy。那行得通吗?
原则上,我相信这是可能的。Cython 通过将类似 Python 的代码转换为 C 代码来工作。该代码可以为 Python 2 或 Python 3 编译(它使用 C 预处理器语句来更改使用的代码)。
坏消息是,它只适用于用 Cython 可以翻译的类 Python 代码编写的扩展。你不能在用 C 编写的扩展上使用 Cython,比如 Numpy。
好消息是,至少对于 Numpy 而言,您不必这样做。从1.5 版开始,Numpy 支持 Python 3。有一个可用于 Windows 的二进制文件;在其他系统上,您可能必须自己弄清楚如何编译代码。
检查您的 Python 文档,“Python/C API 参考手册”部分详细描述了如何做到这一点。
编辑: 所以你想要的是将 2.x 库移植到 3.x。这是一项很大的工作。如果您希望的解决方案存在。Python 2.x 现在应该已经被淘汰了。当然有一个 2to3 工具。但是 C 编写的 Python lib 并不适用这种方式。
因此,您可以按照“Python/C API 参考手册”中的说明将 lib 移植到 3.x 或等待。