Python源码剖析笔记
python 虚拟机:
[python-cobra](file:///C:/Users/zhanghui03/Downloads/source-archive/python-cobra)
Python 架构
Python的整体架构可以分为三个主要部分:
- File Groups
- Python Core
- Runtime Environment
Runtime Environment(Python运行时环境) 包括:
- 对象/类型 系统
- 内存分配器
- 运行时状态信息
运行时状态维护了解释器在执行字节码时不同的状态(比如正常状态 和 异常状态)直接的切换动作, 可将其视为一个巨大而复杂的有穷状态机
内存分配器则全权负责Python中创建对象时, 对内存的申请工作. 实际上 就是Python运行时 和 C中malloc的一层接口.
对象/类型系统 包含了Python中存在的的各种内建对象. 比如整数、list 和 dict, 以及各种用户定义的类型和对象
Python Core:
核心为解释器(Interpreter), 也称虚拟机.上图Interpreter中的箭头方向演示了Python运行过程中的数据流方向.
- Scanner 词法分析
- Parser 语法分析
- Compiler 编译生成Python 字节码
- Code Evaluator 执行Python 字节码
Python 源码下载
Python 源码下载地址:
Python2.7源码
下载后, 解压到本地即可.
Python 源码目录分析
源码目录:
Include: 该目录下包含了Python提供的所有头文件, 如果用户需要自己用C或C++来编写自定义木块扩展Python, 那么就需要在这里提供头文件
Lib: 该目录包含了Python自带的所有标准库, Lib中的库都是用Python语言编写的
Modules: 该目录中包含了所有用C语言编写的模块, 比如random、CStringIO等.Modules中的模块是哪些对速度要求非常严格的模块,而有一些对速度没有太严格
要求的模块, 比如os, 就用Python编写, 并且放在Lib目录下
Parser: 该目录包含了Python解释器中的Scanner和Parser部分, 即对Python源代码进行词法分析和语法分析的部分。除了这些, Parser目录下还包含了一些有用的
工具,这些工具能够根据Python语言的语法自动生成Python语言的词法和语法分析器, 与YACC非常类似.
Objects: 该目录包含了所有Python的内建对象, 包括整数、list、dict等.同时, 该目录还包括了Python在运行时需要的所有的内部使用对象的实现.
Python: 该目录下包含了Python解释器中的Compiler和执行引擎部分, 是Python运行的核心所在.
PCbuild:包含了Visual Studio 2003 的工程文件。
Window环境下编译Python
开发环境:
- Win10 专业版
- VS2019 (平台工具集 v110)
- Python 2.7.17
步骤:
-
用vs2019打开PCbuild下的python.vcxproj
-
如果pcbuild解决方案的启动项目不是python, 那么需要将python设置为启动项目.(右键python项目->设置为启动项目)
-
只编译python 和 pythoncore, 所以需要排除其他项目的编译.(右键pcbuild解决方案 -> 配置管理器)
4.设置python 和 pythoncore的平台工具集(右键项目 -> 属性 -> 平台工具集-> 选择v110)
-
然后就可以直接编译了。 最后在PCbuild下会有python_d.exe 和 python27-d.dll
注意事项
在Python2.4的源码中, 许多数值的类型都是int 或 long, 而在Python2.5的源码中, Python自定义了一个新的类型Py_ssize_t. 一般的, 凡出现这个类型的地方, 都可以以int视之.