扩展和嵌入 Python 解释器
************************

本文档描述了如何使用 C 或 C++ 编写模块以使用新模块来扩展 Python 解释器
的功能。 这些模块不仅可以定义新的函数，还可以定义新的对象类型及其方法
。该文档还描述了如何将 Python 解释器嵌入到另一个应用程序中，以用作扩展
语言。 最后，它展示了如何编译和链接扩展模块，以便它们可以动态地（在运
行时）加载到解释器中，如果底层操作系统支持此特性的话。

本文档假设你具备有关 Python 的基本知识。有关该语言的非正式介绍，请参阅
Python 教程。 Python 语言参考手册 给出了更正式的语言定义。 Python 标准
库 包含现有的对象类型、函数和模块（内置和用 Python 编写）的文档，使语
言具有广泛的应用范围。

关于整个 Python/C API 的详细介绍，请参阅独立的 Python/C API 参考手册。


推荐的第三方工具
================

本指南仅介绍了作为此 CPython 版本的一部分提供的用于创建扩展的基本工具
。某些 第三方工具 提供了更简单或更复杂的方式来为 Python 创建 C 和 C++
扩展。


不使用第三方工具创建扩展
========================

本指南的这一部分包括在没有第三方工具帮助的情况下创建 C 和 C++ 扩展。它
主要用于这些工具的创建者，而不是建议你创建自己的 C 扩展的方法。

参见: **PEP 489** -- 多阶段扩展模块初始化

* 1. 使用 C 或 C++ 扩展 Python

  * 1.1. 一个简单的例子

  * 1.2. 关于错误和异常

  * 1.3. 回到例子

  * 1.4. 模块方法表和初始化函数

  * 1.5. 编译和链接

  * 1.6. 在 C 中调用 Python 函数

  * 1.7. 提取扩展函数的参数

  * 1.8. 给扩展函数的关键字参数

  * 1.9. 构造任意值

  * 1.10. 引用计数

  * 1.11. 在 C++ 中编写扩展

  * 1.12. 给扩展模块提供 C API

* 2. 自定义扩展类型：教程

  * 2.1. 基础

  * 2.2. 向基本示例添加数据和方法

  * 2.3. 提供对于数据属性的更精细控制

  * 2.4. 支持循环垃圾回收

  * 2.5. 子类化其他类型

* 3. 定义扩展类型：杂项主题

  * 3.1. 终结和内存释放

  * 3.2. 对象展示

  * 3.3. 属性管理

  * 3.4. 对象比较

  * 3.5. 抽象协议支持

  * 3.6. 弱引用支持

  * 3.7. 更多建议

* 4. 构建 C/C++ 扩展

  * 4.1. 使用 setuptools 构建 C 和 C++ 扩展

* 5. 在 Windows 上构建 C 和 C++ 扩展

  * 5.1. 菜谱式说明

  * 5.2. Unix 和 Windows 之间的差异

  * 5.3. DLL 的实际使用


在更大的应用程序中嵌入 CPython 运行时
=====================================

有时，不是要创建在 Python 解释器中作为主应用程序运行的扩展，而是希望将
CPython 运行时嵌入到更大的应用程序中。 本节介绍了成功完成此操作所涉及
的一些细节。

* 1. 在其它应用程序中嵌入 Python

  * 1.1. 高层次的嵌入

  * 1.2. 突破高层次嵌入的限制：概述

  * 1.3. 只做嵌入

  * 1.4. 对嵌入 Python 功能进行扩展

  * 1.5. 在 C++ 中嵌入 Python

  * 1.6. 在类 Unix 系统中编译和链接
