Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python C API版本2和3的二进制文件 在开源项目中,我们使用Python C API,将Python/Cython和C/C++模块混合到一个C++库中。API只将几个函数的名称从2更改为3。假设编写库时没有这些函数。如果使用Python2编译,它会链接到Python3吗?反之亦然?API头中的宏是否阻止了这种情况_Python_C_Python 3.x_Python C Api - Fatal编程技术网

使用Python C API版本2和3的二进制文件 在开源项目中,我们使用Python C API,将Python/Cython和C/C++模块混合到一个C++库中。API只将几个函数的名称从2更改为3。假设编写库时没有这些函数。如果使用Python2编译,它会链接到Python3吗?反之亦然?API头中的宏是否阻止了这种情况

使用Python C API版本2和3的二进制文件 在开源项目中,我们使用Python C API,将Python/Cython和C/C++模块混合到一个C++库中。API只将几个函数的名称从2更改为3。假设编写库时没有这些函数。如果使用Python2编译,它会链接到Python3吗?反之亦然?API头中的宏是否阻止了这种情况,python,c,python-3.x,python-c-api,Python,C,Python 3.x,Python C Api,如果有一个库二进制文件可以链接到这两个库二进制文件,那么我们就可以省去大量的打包麻烦。不,这是行不通的。不要尝试 即使从3.5到3.6,二进制模块也不能保证二进制可移植。如果你幸运的话,那么有某种机制可以阻止你做这种疯狂的事。但是,如果您设法以某种方式链接库,则会出现一些细微的差异,这些差异将导致严重的错误,例如PyObject的布局更改等等 必须重新编译Python接口以获得确切的Python版本。Python 2和3之间的源代码兼容性是另一回事,而且相对容易实现。对于Python>=3.2,

如果有一个库二进制文件可以链接到这两个库二进制文件,那么我们就可以省去大量的打包麻烦。

不,这是行不通的。不要尝试

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


必须重新编译Python接口以获得确切的Python版本。Python 2和3之间的源代码兼容性是另一回事,而且相对容易实现。

对于Python>=3.2,可以使用它(但比完整的API有一点限制)。显然,这对OPs问题没有帮助,但它允许您在一个二进制模块中执行3.5和3.6。感谢您的明确回答和@DavidW的链接。一些非常基本的函数的名称已经更改(例如,我认为模块初始化),主要是为了防止您执行此操作。API相对稳定,ABI不是。因此,您需要根据Python版本重新编译。编辑:请参阅@DavidW评论中与Antti Haapala以下答案的链接,以了解有关此问题的更多解释。