菜单

扩展开发与C API

相关源文件

本页面介绍了 Python 的 C API,它使开发人员能够用 C 语言编写与 Python 运行时集成的扩展模块。理解 C API 可以帮助开发人员创建高性能的扩展、接口连接外部库以及访问底层系统资源。

有关 Python 对象模型的信息,请参阅对象系统与内存管理。有关解释器状态和线程的详细信息,请参阅运行时与线程管理

API 层与兼容性

Python C API 包含多个具有不同兼容性保证的层。

来源

扩展模块结构

Python 扩展模块是一种具有特定结构的已编译共享库。

基本模块实现

这是一个最简模块示例:

来源

模块初始化方法

Python 支持两种模块初始化方法:

单阶段初始化

PyInit_ 函数的传统方法,所有初始化都在其中进行。

多阶段初始化

较新的方法(Python 3.5+),提供更好的隔离性。

来源

定义自定义类型

Python 类型对象定义用户定义类的行为。有两种创建类型的方法:

静态类型定义

动态类型创建(Python 3.2+)

动态方法(PyType_FromSpec)是使用 Limited API 的扩展所必需的。

来源

类型组件

类型对象由定义行为的各种组件组成。

方法、属性与特性

自定义类型可以定义方法、数据属性和特性。

方法

数据属性

特性(Getter/Setter)

来源

内存管理与引用计数

Python 使用引用计数进行内存管理。每个对象都有一个引用计数,用于跟踪对它的引用数量。

引用计数宏

目的
Py_INCREF(obj)增加引用计数。
Py_DECREF(obj)减少引用计数,并可能释放对象。
Py_XINCREF(obj)Py_INCREF 的安全版本(会检查 NULL)。
Py_XDECREF(obj)Py_DECREF 的安全版本(会检查 NULL)。
Py_NewRef(obj)返回对象的新引用(Python 3.10+)。
Py_XNewRef(obj)返回对象的新引用,或 NULL(Python 3.10+)。

来源

参数解析

将 Python 参数转换为 C 值需要显式解析。

基本解析函数

格式说明符

格式C 类型Python 类型
iintint
llongint
f浮点数浮点数
ddouble浮点数
sconst char*str
OPyObject*任意
O!PyObject*已检查类型
O&PyObject*已转换

来源

参数处理

Argument Clinic 从特殊注释生成参数解析代码。

来源

错误处理

C API 中的错误处理涉及设置异常并返回错误指示符。

常见错误处理模式

来源

线程安全与 GIL

Python 的全局解释器锁 (GIL) 可防止多个线程同时执行 Python 字节码。

GIL 管理

对于 CPU 密集型 C 代码,请释放 GIL。

来源

无锁线程支持

Python 3.13 增加了在不使用 GIL 的情况下运行的实验性支持。

来源

稳定 ABI 与 Limited API

稳定 ABI 确保了跨 Python 版本扩展的二进制兼容性。

使用 Limited API

来源

扩展测试工具

Python 包含用于测试 C API 的特殊模块。

来源

更多资源

有关特定主题的更详细信息,请参阅。