1. 编译器准备
准备 Python 源码
在 Python 的官网,下载需要进行编译的 Python 版本源代码。这里选择的是 Python 2 的最新版本Python-2.7.14.tar.xz
,点击前往。准备编译器
在 Windows 上,Python 2.7 的源代码内置的项目工程,支持 Visual Studio 2008、2010 打开。当然,VS 2013 也能够编译,在导入项目时,选择升级 VC++编译器和库即可。这里使用的是,VS2013_RTM_PRO_CHS
,点击下载。
2. 源代码的目录结构
- Demo:Demo 用的代码,主要用来展示 Python 的一些应用
- Doc:Python 的 UserManual,Latex 格式
- Grammar:语法文件。这个语法文件会在 Python 运行的时候被用来分析Python 源代码
- include:Python Include 用的头文件
- Lib:Python 的库文件
- Mac:For Mac
- Misc:如字面意思,一些不适合放在其他地方的文件就放在这里了
- Modules:Python 的一些 Built-in Module 的实现
- Objects:Python 的基本内部对象的实现,比如 class/list 等等
- Parser:Python 的词法分析和语法分析
- PC:比较老的 Windows 和 OS2 的 Port 的项目以及 Port 用到的一些公用文件放在这里,PCBuild 和 PCBuild8 都要用到这个目录的内容
- PCBuild:Python 用于 Visual Studio 2008/2010 的 Project 文件
- Python:Python 主程序代码
- RISCOS:Python 的 RISC OS Port
- Tools:Build 和 Extend Python 所需的工具
3. 编译步骤
第一步,解压 Python-2.7.14
第二步,进入 PCbuild文件夹,使用 VS2013 打开 pcbuild.sln
第三步,编译运行。最终会在 PCbuild 文件夹下生成
python_d.exe
和python27_d.dll
文件,可双击python_d.exe
,进入 python 命令行环境。
4. Python 的总体架构
在图左边是, Python 提供的大量的模块,库以及用户自定义的模块。比如在执行 import os 时,这个 os 就是 Python 内建的模块,当然用户还可以通过自定义模块来扩展 Python 的模块。
在图中间的是,Python 的核心,解释器(interpreter)。Scanner 对应词法分析,将文件输入的 Python 源代码或从命令行输入的一行行 Python 代码切分为一个一个的 token;Parse r对应语法分析部分,在 Scanner 的分析结果上进行语法分析,建立抽象语法树(AST);Compiler 是根据建立的AST生成指令集合,Python字节码(byte code),就像Java编译器和C#编译器所做的那样;最后由 Code Evaluator 来解释并执行这些字节码。因此,Code Evaluator 又可以被称为执行引擎。
在图右边是,Python的运行时环境,包括对象/类型系统(Object/Type structures),内存分配器(Memory Allocator)和运行时状态(Current State of Python)。运行时状态维护了解释器在执行字节码时,在不同的状态之间切换的动作,可以将它视为一个巨大而复杂的有穷状态机。内存分配器则全权负责 Python 中创建对象时对内存的申请工作,实际上它就是 Python 运行时与C中 malloc 的一层接口。而对象/类型系统则包含了 Python 中存在的各种内建对象,比如整数、list 和 dict 等。
5. 参考
- 《Python源码剖析》