扩展和嵌入 Python 解释器¶
本文档介绍了如何用 C 或 C++ 编写模块,通过新增模块来扩展 Python 解释器。这些模块可以完成 Python 代码所能完成的事情——定义函数、对象类型和方法——但还可以与原生库交互,或通过避免解释器开销来获得更好的性能。本文档还介绍了如何将 Python 解释器嵌入到另一个应用程序中,将其用作扩展语言。最后,它还说明了如何编译和链接扩展模块,使其能够在底层操作系统支持此功能的情况下被动态加载(在运行时)到解释器中。
本文档假定读者具有 C 和 Python 的基础知识。有关 Python 的非正式介绍,请参阅 Python 教程。Python 语言参考手册 给出了该语言更正式的定义。Python 标准库 记录了赋予该语言广泛应用范围的现有对象类型、函数和模块(包括内置的和用 Python 编写的)。
关于整个 Python/C API 的详细介绍,请参阅独立的 Python/C API 参考手册。
为了支持扩展,Python 的 C API(应用程序员接口)定义了一组函数、宏和变量,可用来访问 Python 运行时系统的大多数方面。通过包含 "Python.h" 头文件,可以将 Python API 引入到 C 源文件中。
备注
C 扩展接口特指 CPython,扩展模块无法在其他 Python 实现上工作。在大多数情况下,应该避免写 C 扩展,来保持可移植性。举个例子,如果你的用例调用了 C 库或系统调用,你应该考虑使用 ctypes 模块或 cffi 库,而不是自己写 C 代码。这些模块允许你写 Python 代码来接口 C 代码,并且相较于编写和编译 C 扩展模块,该方法在不同 Python 实现之间具有更高的可移植性。
推荐的第三方工具¶
本文档只涵盖作为此版本 CPython 一部分提供的、用于创建扩展的基本工具。一些 第三方工具 为创建 Python 的 C 和 C++ 扩展提供了更简单也更复杂的方式。
虽然本文档面向扩展作者,但也应当有助于此类工具的作者。例如,教程模块可以作为构建工具的简单测试用例,或作为代码生成器预期输出的样例。
C API 教程¶
本教程介绍如何使用 Python C API,即使用作为此版本 CPython 一部分提供的基本工具,用 C 或 C++ 编写一个简单模块。
中级主题指南¶
本指南的这一部分包括在没有第三方工具帮助的情况下创建 C 和 C++ 扩展。它主要用于这些工具的创建者,而不是建议你创建自己的 C 扩展的方法。
在更大的应用程序中嵌入 CPython 运行时¶
有时,不是要创建在 Python 解释器中作为主应用程序运行的扩展,而是希望将 CPython 运行时嵌入到更大的应用程序中。 本节介绍了成功完成此操作所涉及的一些细节。