使用Python C API版本2和3的二进制文件

时间:2017-06-02 06:26:02

标签: python c python-3.x python-c-api

在一个开源项目1中,我们使用Python C API将Python / Cython和C / C ++模块与一个C ++库混合在一起。 API仅将少数函数的名称从2更改为3.假设在没有这些函数的情况下编写库。如果使用Python2编译,它会链接到Python3,反之亦然?这是否会被API标头中的宏阻止?

拥有一个可以链接到两者的库二进制文件可以避免我们的主要包装麻烦。

1 个答案:

答案 0 :(得分:1)

不,它不会起作用。不要试试。

二进制模块不保证是二进制可移植的,即使从3.5到3.6也是如此。如果你幸运,那么有一些机制可以禁止你做这种疯狂。但是,如果您设法以某种方式链接库,则会有一些细微的差异会导致严重的错误,例如PyObject的布局变化等等。

必须针对确切的Python版本重新编译Python接口。 Python 2和3之间的源代码兼容性是不同的,并且相对容易实现。