稳定的应用程序二进制接口

传统上,Python的C API将随每个版本而改变。大多数更改都是源兼容的,通常只需添加API,而不是加入API删除API(虽然有些接口在首先被弃用后会被删除).

遗憾的是,API兼容性并未扩展二进制兼容性ABI)。原因主要是结构定义的演变,添加新字段或更改字段类型可能不会破坏API,但可能会破坏ABI。因此,扩展模块需要针对每个Python版本进行重新编译(尽管在Unix上没有使用任何受影响的接口时可能会出现异常)。此外,在Windows上,扩展模块与特定的pythonXY.dll链接,需要重新编译为更新的.

从Python 3.2开始,已声明API的一个子集以保证stableABI。希望使用此API的扩展模块(称为“有限API”)需要定义Py_LIMITED_API。然后,许多解释器细节将从扩展模块中隐藏;作为回报,构建一个模块,可以在任何3.xversion(x\u003e = 2)上工作,无需重新编译.

在某些情况下,需要使用新函数扩展稳定的ABI。希望使用这些新API的扩展模块需要将Py_LIMITED_API设置为PY_VERSION_HEX值(参见 API和ABI版本)他们想要支持的最小Pythonversion(例如0x03030000for Python 3.3)。这些模块将适用于所有后续的Python版本,但无法在旧版本上加载(因为发送符号).

从Python 3.2开始,有限API可用的函数集在中记录PEP 384 。在C API文档中,不属于有限API的API元素标记为“不属于有限API”.

评论被关闭。