# 17.3 为 CPython 项目做贡献

在 12 个月的时间里，CPython 有 12 个新的小版本，数百个更改和错误报告，以及数千个对源代码的提交。

CPython 是世界上最大、最有活力、最开放的软件项目之一。你在这本书中获得的知识将使你在指引、理解和帮助改进 CPython 项目方面有一个巨大的领先优势。

CPython 社区渴望有更多的贡献者。但在提交对 CPython 的更改、改进或修复之前，你需要知道从哪里开始。以下是一些想法：

1. 开发人员在 bugs.python.org 上创建分类问题；
2. 解决描述良好的小问题。

让我们更详细地探讨其中的每一个想法。

{% hint style="info" %}
**重要**

译者注：Python 的问题单管理服务于 2022 年 3 月从 bugs.python.org 迁移至 <https://github.com/python/cpython/issues>
{% endhint %}

### 问题分类

所有错误报告和更改请求首先都提交到 bugs.python.org，也称为 **BPO**。这个网站是 CPython 项目的错误跟踪器。如果你想在 GitHub 上提交一个 Pull Request，那么你首先需要一个 **BPO 序号**，这是由 BPO（bugs.python.org）创建的问题序号。

首先，你要到左侧菜单上的 `User/Register` 先注册一个账号。

默认视图并不是特别有效，它同时显示了用户提出的问题和核心开发人员提出的问题，这些问题可能已经被解决了。

在登录后，请转到左侧菜单上的 `Your Queries/Edit`。此页面将为你提供一个可添加书签的问题索引查询列表：

图片不翻译

更改值到 `leave in` 中，以将这些查询包含在 `Your Queries` 菜单中：

以下是我觉得有用的一些查询：

* **Easy Documentation Issues**：尚未进行的文档改进；
* **Easy Tasks**：被确定为适合初学者的任务；
* **Recently Created**：最近创建的问题；
* **Reports Without Replies**：从未得到回复的 Bug 报告；
* **Unread**：从未被读取的Bug报告；
* **50 Latest Issues**：最近更新的五十个问题。

有了这些视图，你可以按照 “问题分类” 指南了解评论问题的最新流程。

### 创建一个 Pull Request 来修复问题

当你解决了一个问题后，你就可以开始创建一个修复 Pull Request 并将其提交给 CPython 项目。流程如下：

1. 确保你有一个 BPO 序号；
2. 在你的 CPython 的 fork 仓上创建一个分支。有关下载源代码的步骤，请参阅“获取源代码”章节；
3. 创建一个测试来重现问题。有关步骤，请参阅“测试套件”章节中的“测试模块”小节；
4. 确保你的更改符合 PEP 7 和 PEP 8 风格指南；
5. 运行回归测试套件以确认所有测试都通过。当你提交 Pull Request 时，回归测试套件将自动在 GitHub 上运行，但最好先在本地进行检查。有关步骤，请参阅“测试套件”章节；
6. 提交并将你的更改推送到 GitHub；
7. 访问 github.com/python/cpython 并为你的分支创建一个 Pull Request。

提交 Pull Request 后，它将由一个分类团队成员进行分类，并分配给核心开发人员或团队进行检视。

如前所述，CPython 项目需要更多的贡献者。从你提交更改到被检视之间的时间可能是一小时、一周或几个月。如果你没有立即得到回应请不要沮丧。大多数核心开发者都是志愿者，他们倾向于批量检视或合并 Pull Request。

{% hint style="info" %}
**重要**

每个 Pull Request 只修复一个问题是很重要的。如果你在写补丁时，在代码中看到一个单独的、不相关的问题，请记下这个问题并将其作为第二个 Pull Request 提交。
{% endhint %}

为了帮助你快速合并更改，对问题、解决方案和修复进行良好的解释会有很大帮助。

### 其他贡献

除了修复错误之外，你还可以对 CPython 项目进行一些不同类型的改进：

* 许多标准库函数和模块都缺少单元测试。你可以写一些测试并提交给项目；
* 许多标准库函数没有最新的文档。你可以更新文档并提交更改。
