CPython-01 源码解析入门
简介
Python 3.14(π)即将发布,在此时机,决定从头系统学习 Python 源码,在 2025 年末来完成这个大目标。本系列暂基于 CPython 3.14 rc 版本进行源码分析。后续会随官方更新切换为正式版。
源码下载
CPython 源码下载有以下几种渠道
python 官网下载页 选择需要的版本,进入下载页面后选择
Gzipped source tarball或者XZ compressed source tarball下载源码包。CPython Github 仓库 下载压缩包,或直接使用 git 克隆仓库。
CPython Gitee 镜像仓库 下载方式与 Github 相同。
阿里云开源镜像站 提供了 CPython 的各个版本的安装包及其源码下载。
结构介绍
下载完源码后,解压缩得到的目录结构大致如下(不同版本可能略有差异):
1 | CPython |
Doc
存放 Python 文档的源文件(.rst),编译之后生成 Python 官方文档
Grammar
定义了 Python 的语法规则
Include
存放 Python 的公开头文件,这些头文件定义了 Python 解释器的接口(C API),供其他 C 扩展模块使用。
InternalDocs
面向 CPython 开发人员的 CPython 细节文档。该文档主要用作开发人员参考,不作为用户文档。
Lib
使用 Python 编写的标准库代码
Misc
包含各种各种杂项文件,入配置文件,工具。
Modules
Python 使用 C 编写的内置库模块,编译后会内嵌在解释器中。主要是一些与性能或底层相关的部分。例如:re、datetime等
Objects
Python 核心数据结构,包括内置数据类型(list, dict, str 等)的具体实现
Parser
Python 编译器的具体实现,负责将 Python 代码编译为字节码(PyCodeObject)对象。编译之后的字节码可以交给虚拟机来执行了
Programs
Python 可执行文件(python/python.exe)本身的入口点(main 函数)的源代码
Python
Python 虚拟机的具体实现,负责解释执行字节码。
Tools
构建或扩展 Python 时有用的 Python 程序。例如:检查未添加新全局变量的工具、一个用于分析 C 代码(尤其是 CPython 代码库)的工具、pdb、i18n 等。
平台相关
主要是一些在特定的操作系统下编译,或者和特定的操作系统相关的代码。
- Android
- iOS
- Mac
- PC
- PCbuild
Python 代码执行过程
通过源码目录可知,Python 代码执行实际上会分为 编译 和 解释 两个阶段。具体的过程如下
Read File- 读取 Python 代码文件Scanner- 进行语法分词,将源代码(.py 文件)转换为tokens(词法单元)Parser- 语法分析,生成抽象语法树 ASTCompiler- 编译 AST 为字节码Code Eval- 解释执行字节码
其中,1、2、3、4 均由 Python 编译器负责,5 由 Python 虚拟机负责。所以,Python 解释器实际上是由 Python 编译器 + Python 虚拟机组成的。
Python 解释器 = Python 编译器 + Python 虚拟机
后续学习的细节会着重在语言细节的实现上,而不是编译器或虚拟机的实现上。