本指南是一个全面的资源贡献 给Python的 -为新的和经验丰富的贡献者。这是 保持由维护的Python同一社区。我们欢迎您对Python的贡献!
快速参考
这是设置和添加补丁所需的基本步骤。了解基础知识后,这就是清单。有关完整说明,请参阅安装指南。
-
安装并设置Git和其他依赖项(有关详细信息,请参见“ 获取安装程序”页面)。
-
用叉子CPython的库 到你的GitHub帐户,并获得源代码使用:
git clone https://github.com/
/cpython cd cpython -
在UNIX和Mac OS上构建Python,请使用:
./configure --with-pydebug && make -j
在Windows上使用:
PCbuild\build.bat -e -d
另请参见更详细的说明, 如何安装和构建依赖项以及UNIX, Mac OS和Windows的特定于平台的页面。
-
运行测试:
./python -m test -j3
在大多数 Mac OS X系统上,请替换
./python
为./python.exe
。在Windows上,使用python.bat
。在Python 2.7中,替换test
为test.regrtest
。 -
创建一个新分支,您将在其中处理该问题,例如:
git checkout -b fix-issue-12345 master
如果问题尚不存在,请创建它。琐碎的问题(例如拼写错误)不需要创建任何问题。
-
解决问题后,运行测试,然后运行,如果一切正常,请提交。
make patchcheck
-
将分支推送到GitHub的fork上,并创建一个pull请求。
bpo-NNNN
在请求请求描述中使用发行号。例如:bpo-12345: Fix some bug in spam module
注意:如本指南“ 许可”部分所述,初次贡献者将需要签署“贡献者许可协议”(CLA)。
快速链接
以下是在贡献Python时可能会经常引用的一些链接:
- 问题追踪器
- Buildbot状态
- 在哪里获得帮助
- PEP(Python增强建议)
- Git训练营和备忘单
Python分支的状态
科 | 时间表 | 状态 | 初版 | 生命尽头 | 发布经理 |
---|---|---|---|---|---|
主 | PEP 596 | 特征 | 待定 | 待定 | ŁukaszLanga |
3.8 | 人教版569 | 错误修正 | 2019-10-14 | 2024-10 | ŁukaszLanga |
3.7 | PEP 537 | 错误修正 | 2018-06-27 | 2023-06-27 | 内德·迪利 |
2.7 | PEP 373 | 错误修正 | 2010-07-03 | 2020-01-01 | 本杰明·彼得森 |
3.6 | PEP 494 | 安全 | 2016-12-23 | 2021-12-23 | 内德·迪利 |
3.5 | PEP 478 | 安全 | 2015-09-13 | 2020-09-13 | 拉里·黑斯廷斯 |
master分支当前是将来的Python 3.9,并且是唯一接受新功能的分支。可以在下载页面上找到每个Python版本的最新版本。
状态:
特征: | 接受新功能,错误修正和安全修正。 |
---|---|
预发行: | 即将发布的功能版本接受了功能修复,错误修复和安全修复。 |
错误修正: | 错误修正和安全修正被接受,新的二进制文件仍被发布。(也称为维护模式或稳定发布) |
安全: | 仅接受安全修复程序,并且不再发布任何二进制文件,但是可以发布仅源代码的新版本 |
生命尽头: | 释放周期被冻结;没有进一步的变化可以推到它。 |
斜体字的日期已安排好并且可以调整。
默认情况下,寿命终止是在第一个发行版之后的5年,但是可以由每个分支的发行经理进行调整。对Python 2.7的支持目前已扩展至2020-01-01。早于2.7的版本已达到使用寿命。
另请参阅开发周期页面以获取有关分支的更多信息。
贡献
我们鼓励每个人都为Python做出贡献,因此我们制定了本开发人员指南。如果您在阅读了本指南中的内容后仍然有疑问,那么可以使用Core Python Mentorship组来帮助指导新贡献者完成整个过程。
来自Python社区的许多人为《开源指南》中的一系列出色指南做出了贡献。
核心开发人员和贡献者都将发现以下有用的指南:
- 如何为开源做贡献
- 建立欢迎社区
贡献Python指南:
新贡献者 | 记录员 | 分类器 | 核心开发人员 |
---|---|---|---|
入门 | 帮助文档 | 问题跟踪 | 如何成为核心开发者 |
在哪里获得帮助 | 记录Python | 对问题进行分类 | 开发者日志 |
拉取请求的生命周期 | 时尚指南 | 帮助分类问题 | 接受拉取请求 |
跑步和写作测试 | reStructuredText入门 | 专家索引 | 开发周期 |
解决“简单”问题(及以后) | 正在翻译 | 核心开发人员的动机和隶属关系 | |
跟随Python的发展 | 核心开发人员办公时间 | ||
Git训练营和备忘单 |
入门后,高级任务和主题:
- 测试套件中的静音警告
- 修复buildbots发现的问题
- 覆盖范围扫描
- 帮助审核打开的请求。了解如何查看“拉取请求”。
- 解决“简单”问题(及以后)
据建议,由于需要上述文件读取。新的贡献者将通过阅读此表中提到的部分来建立对CPython工作流程的理解。您可以停下来感到舒适,然后立即开始贡献,而无需立即阅读和理解这些文档。如果您确实选择跳过文档,请注意,它是在阅读了先前文档的前提下编写的,因此您可能会发现有必要回溯以填写缺少的概念和术语。
提议对Python本身进行更改
改进Python的代码,文档和测试是正在进行的任务,这些任务永远都不会“完成”,因为Python是不断发展的技术体系的一部分。与这些必要的维护活动相比,一项更具挑战性的正在进行的任务是找到以标准库和语言定义的形式使Python成为开发人员工具包中更好的工具的方法。
尽管这些更改比上述更改少得多,但它们确实会发生,并且该过程也作为本指南的一部分进行了描述:
- 添加到Stdlib
- 更改Python语言
其他口译员的实现
该指南专门为Python参考解释器(也称为CPython)做出了贡献(尽管大多数标准库是用Python编写的,解释器核心是用C编写的,并且最容易与C和C ++生态系统集成)。
还有其他Python实现,每个实现都有不同的重点。像CPython一样,他们总是比开发人员有更多要做的事情。可能有趣的一些主要示例是:
- PyPy:一个Python解释器,专注于在主要平台上进行高速(JIT编译)操作
- Jython:一个Python解释器,致力于与Java虚拟机(JVM)环境的良好集成
- IronPython:一个Python解释器,致力于与.NET和Mono提供的公共语言运行时(CLR)良好集成
- Stackless:Python解释器专注于提供轻量级微线程,同时仍与CPython特定的扩展模块保持很大程度上兼容
主要资源
- 编码风格指南
-
- PEP 7(C代码样式指南)
- PEP 8(Python代码样式指南)
- 问题追踪器
-
- 元跟踪器(问题跟踪器的问题跟踪器)
- 专家索引
- Buildbot状态
- 源代码
-
- 在线浏览
- * master *分支的快照
- 每日OS X安装程序
- PEP(Python增强建议)
- 在哪里获得帮助
- 开发者日志
其他资源
- 任何人都可以克隆本指南的资源。请参阅 帮助开发人员指南。
- 帮助 …
-
- 探索CPython的内部
- 改变CPython的语法
- CPython编译器的设计
- 工具支援
-
- gdb支持
- 用Clang进行动态分析
- 在Misc目录中找到各种带有配置文件的工具
- 有关编辑器及其配置的信息可在Wiki中找到。
- python.org维护
- 搜索本指南
行为准则
请注意,PSF行为准则涵盖 了Python Software Foundation支持的基础架构上的所有交互 ,其中包括Python自身开发中使用的所有基础架构(例如,邮件列表,问题跟踪器,GitHub等)。总的来说,这意味着无论他们在项目中的地位如何,每个人都应该开放,体贴和尊重他人。
完整目录
-
1.入门
- 1.1。安装
git
- 1.2。获取源代码
-
1.3。编译和构建
- 1.3.1。UNIX系统
- 1.3.2。视窗
-
1.4。安装依赖项
- 1.4.1。的Linux
- 1.4.2。macOS和OS X
- 1.5。再生
configure
-
1.6。解决构建问题
- 1.6.1。避免重新创建自动生成的文件
- 1.7。编辑器和工具
- 1.8。目录结构
- 1.1。安装
-
2.在哪里获得帮助
- 2.1。询问#python-dev
- 2.2。祖利普
- 2.3。核心导师制
- 2.4。核心开发人员办公时间
- 2.5。邮件列表
- 2.6。提交错误
-
3.拉取请求的生命周期
- 3.1。介绍
- 3.2。快速指南
- 3.3。分步指南
- 3.4。做好公关
- 3.5。
patchcheck
- 3.6。做好承诺
- 3.7。发牌
- 3.8。提交中
- 3.9。将现有补丁从bpo转换为GitHub
-
3.10。审核中
- 3.10.1。如何查看拉取请求
- 3.11。在GitHub上留下请求请求评论
- 3.12。取消其他核心开发人员的评论
- 3.13。提交/拒绝
- 3.14。贷记
-
4.运行和写作测试
-
4.1。跑步
- 4.1.1。意外跳过
- 4.2。写作
- 4.3。基准测试
-
4.1。跑步
-
5.增加测试范围
- 5.1。常见陷阱
-
5.2。测量覆盖率
- 5.2.1。使用coverage.py
- 5.2.2。使用test.regrtest
- 5.3。提交问题
- 5.4。用gcov和lcov测量C代码的覆盖率
-
6.帮助文档
- 6.1。Python文档
- 6.2。帮助解决文件问题
- 6.3。校对
- 6.4。帮助开发人员指南
- 6.5。开发人员指南工作流程
-
7.编写Python文档
- 7.1。介绍
-
7.2。时尚指南
- 7.2.1。空格的使用
- 7.2.2。脚注
- 7.2.3。大写
- 7.2.4。肯定音
- 7.2.5。表达经济
- 7.2.6。安全注意事项(和其他问题)
- 7.2.7。程式码范例
- 7.2.8。等效代码
- 7.2.9。听众
-
7.3。reStructuredText入门
- 7.3.1。段落
- 7.3.2。内联标记
- 7.3.3。列表和引号
- 7.3.4。源代码
- 7.3.5。超连结
- 7.3.6。栏目
- 7.3.7。显式标记
- 7.3.8。指令
- 7.3.9。脚注
- 7.3.10。评论
- 7.3.11。源编码
- 7.3.12。陷阱
-
7.4。额外的标记构造
- 7.4.1。元信息标记
- 7.4.2。特定于模块的标记
- 7.4.3。信息单位
- 7.4.4。显示代码示例
- 7.4.5。内联标记
- 7.4.6。交联标记
- 7.4.7。段落级标记
- 7.4.8。目录标记
- 7.4.9。索引生成标记
- 7.4.10。语法制作展示
- 7.4.11。换人
-
7.5。建立文件
- 7.5.1。使用make / make.bat
- 7.5.2。使用sphinx构建
-
7.6。正在翻译
- 7.6.1。开始新的翻译
- 7.6.2。PEP 545摘要:
- 7.6.3。如何获得帮助
- 7.6.4。翻译常见问题
- 8.测试套件中的静音警告
- 9.解决“容易”的问题(及以后)
-
10.问题追踪
-
10.1。使用问题跟踪器
- 10.1.1。检查是否已存在错误
- 10.1.2。报告问题
- 10.1.3。了解问题的进度和状态
- 10.2。对问题跟踪器的解决方案有不同意见
-
10.3。帮助分类问题
- 10.3.1。分类报告
- 10.3.2。审查补丁
- 10.3.3。查找您可以帮助解决的问题
- 10.4。在问题跟踪程序上获得“开发人员”角色
- 10.5。元追踪器
-
10.1。使用问题跟踪器
-
11.对问题进行分类
- 11.1。Python分流团队
-
11.2。成为Python Triage团队的成员
- 11.2.1。PR的GitHub标签
-
11.3。问题跟踪器中的字段
- 11.3.1。标题
- 11.3.2。类型
- 11.3.3。阶段
- 11.3.4。组件
- 11.3.5。版本号
- 11.3.6。优先
- 11.3.7。关键词
- 11.3.8。八卦清单
- 11.3.9。分配给
- 11.3.10。依存关系
- 11.3.11。取代者
- 11.3.12。状态
- 11.3.13。解析度
- 11.3.14。汞库
- 11.4。在评论中生成特殊链接
- 11.5。分类检查清单
-
12.跟随Python的发展
- 12.1。邮件列表
- 12.2。祖利普
- 12.3。IRC
- 12.4。网志
- 12.5。这些沟通渠道的行为标准
- 12.6。为开源参与设定期望
- 12.7。其他资料库
- 13.将Python移植到新平台
-
14.如何成为核心开发人员
- 14.1。它需要什么
- 14.2。这是什么意思
-
14.3。获得提交特权
- 14.3.1。邮件列表
- 14.3.2。签署贡献者协议
- 14.3.3。拉取请求合并
- 14.4。职责范围
-
15.开发者日志
- 15.1。授予或删除访问权限的过程
-
16.接受拉取请求
-
16.1。公关准备好了吗?
- 16.1.1。测试套件是否仍然通过?
- 16.1.2。补丁清单
- 16.2。处理他人代码
- 16.3。贡献者许可协议
- 16.4。检查是否已收到CLA
- 16.5。最新消息和新闻条目
-
16.6。使用Git
- 16.6.1。活动分支
- 16.6.2。向后移植更改到较旧的版本
- 16.6.3。还原合并的拉取请求
-
16.1。公关准备好了吗?
-
17.开发周期
-
17.1。分行
- 17.1.1。开发中(主)分支
- 17.1.2。维修部门
- 17.1.3。安全部门
- 17.1.4。报废分公司
-
17.2。阶段
- 17.2.1。前阿尔法
- 17.2.2。Α
- 17.2.3。贝塔
- 17.2.4。候选发布者(RC)
- 17.2.5。最后
-
17.3。仓库管理
- 17.3.1。组织存储库策略
- 17.3.2。组织所有者政策
- 17.3.3。当前所有者
- 17.3.4。存储库管理员角色策略
- 17.3.5。现任管理员
- 17.3.6。存储库版本管理器角色策略
-
17.1。分行
-
18.持续整合
- 18.1。检查自动构建的结果
- 18.2。稳定性
- 18.3。与标志有关的故障
- 18.4。与订单有关的故障
- 18.5。瞬态故障
- 18.6。定制建造者
-
19.添加到Stdlib
- 19.1。添加到预先存在的模块
-
19.2。添加一个新模块
- 19.2.1。可接受的模块类型
- 19.2.2。要求
- 19.2.3。提案流程
-
20.更改Python语言
- 20.1。符合条件的
- 20.2。PEP过程
- 20.3。建议新功能和语言更改
-
21.专家索引
- 21.1。标准库
- 21.2。工具类
- 21.3。平台类
- 21.4。杂
- 21.5。文档翻译
-
22. gdb支持
- 22.1 gdb 7及更高版本
- 22.2。gdb 6和更早版本
- 22.3。更新auto-load-safe-path以允许test_gdb运行
-
23.探索CPython的内部
- 23.1。CPython源代码布局
- 23.2。其他参考
-
24.更改CPython的语法
- 24.1。抽象
- 24.2。基本原理
- 24.3。检查清单
-
25. CPython编译器的设计
- 25.1。抽象
- 25.2。解析树
- 25.3。抽象语法树(AST)
- 25.4。内存管理
- 25.5。将树解析为AST
- 25.6。控制流程图
- 25.7。AST到CFG到字节码
- 25.8。引入新的字节码
- 25.9。代码对象
- 25.10。重要档案
- 25.11。已知的编译器相关实验
- 25.12。参考文献
- 26.更新标准库扩展模块
-
27.覆盖率扫描
- 27.1。访问分析报告
- 27.2。建立和上传分析
-
27.3。已知限制
- 27.3.1。误报
- 27.3.2。故意地
- 27.4。造型
-
27.5。工作流程
- 27.5.1。误报和故意问题
- 27.5.2。积极的问题
- 27.6。联系
-
28.使用Clang进行动态分析
- 28.1。什么是C?
- 28.2。什么是消毒剂?
-
28.3。Clang / LLVM设置
- 28.3.1。下载,构建和安装
-
28.4。Python构建设置
- 28.4.1。构建Python
- 28.4.2。将黑名单(忽略)发现
-
29.运行一个buildbot工人
- 29.1。准备buildbot worker设置
-
29.2。设置buildbot worker
- 29.2.1。传统的常开机器
- 29.2.2。潜在工人
- 29.3。Buildbot工作者操作
- 29.4。所需端口
- 29.5。所需资源
- 29.6。安全注意事项
-
30.核心开发人员的动机和隶属关系
- 30.1。出版作品
- 30.2。此页面的目标
- 30.3。范围限制
-
31. Git训练营和备忘单
- 31.1。派生CPython GitHub存储库
- 31.2。克隆派生的CPython存储库
- 31.3。列出远程存储库
- 31.4。设置您的姓名和电子邮件地址
- 31.5。
autocrlf
在Windows上启用 - 31.6。创建和切换分支
- 31.7。删除分支
- 31.8。暂存和提交文件
- 31.9。还原更改
- 31.10。藏匿变化
- 31.11。提交变更
- 31.12。推动变革
- 31.13。创建拉取请求
- 31.14。与上游同步
- 31.15。从Mercurial向Git应用补丁
- 31.16。下载他人的补丁
- 31.17。接受和合并拉取请求
- 31.18。向后移植合并的更改
- 31.19。合并前编辑拉取请求
-
32.附录:主题
- 32.1。贡献者基础
- 32.2。核心开发人员
- 32.3。贡献者的开发工作流程
- 32.4。编写Python和样式指南
- 32.5。问题跟踪和分类
- 32.6。语言深度开发
- 32.7。测试和持续集成