Date: 2021.4.10
Author: jwensh
1. 下载
直接去python官网,下载源码,这个源码阅读,看你的需要来选择版本,你可以选择最新版本,来查看新版本更新的内容细节,或者你选择你当前学习或工作使用的版本:
我下载了 Python3.9.4 版本
2. 目录结构
- Python源码压缩包,解压后目录结构为:
-
$ tree -L 1
.
├── CODE_OF_CONDUCT.md
├── Doc # rst文件与Python的关系,类似Javadoc与Java,可以build成html的文档形式
├── Grammar # python的语法清单
├── Include # 该目录下包含了Python提供的所有文件头,如果用户需要自己用C或者C++来编写自定义模块扩展Python,那么就需要用到这里提供的头文件。
├── LICENSE
├── Lib # 该目录包含了Python自带的所有标准库,Lib中的库都是用Python语言编写的。
├── Mac # 简要概述了Python发行版中的一些macOS特定功能
├── Makefile.pre.in
├── Misc # 这个目录包含的文件在其他地方放不下。有些文件只有历史意义
├── Modules # 该目录中包含了所有用C语言编写的模块,比如random、cStringIO等。Modules中的模块是那些对速度要求非常严格的模块,而有一些对速度没有太严格要求的模块,比如os,就是用Python编写,并且放在Lib目录下的。
├── Objects # 该目录中包含了所有Python的内建对象,包括整数、list、dict等。同时,该目录还包括了Python在运行时需要的所有的内部使用对象的实现。
├── PC # 包含了制作Python几个旧PC端口的完整项目文件,以及所有PC特有的Python源文件。应该位于Python发行版的根目录,应该有“Modules”、“Objects”、“Python”等目录。在这个“个人电脑”子目录的父目录中
├── PCbuild # 包含了Visual Studio的工程文件,研究Python源码就从这里开始。
├── Parser # 该目录中包含了Python解释器中的Scanner和Parser部分,即对Python源码进行词法分析和语法分析的部分。除了这些,Parser目录下还包含了一些有用的工具,这些工具能够根据Python语言的语法自动生成Python语言的词法和语法分析器,与YACC非常类似。
├── Programs # 二进制可执行文件的源文件(与共享模块相对)
├── Python # 该目录中包含了Python解释器中的Compiler和执行引擎部分,是Python运行的核心所在。
├── README.rst
├── Tools # 该目录包含许多Python程序,这些程序在构建或扩展Python时非常有用
├── aclocal.m4
├── config.guess
├── config.sub
├── configure
├── configure.ac
├── install-sh
├── netlify.toml
├── pyconfig.h.in
└── setup.py # 安装使用的脚本
- 源码首要关注的目录:
Include
、Objects
、Modules
3. 阅读方式
- 前提:
需要些写C语言的基础
,不然看起来,会有些吃力,为什么需要C,那需要看你使用的是CPython
还是JPython
当你开始阅读源码时,一定是有某些问题被背景,才会驶向这条航道,而我主要时为了了解,垃圾回收机制,而为什么需要了解python的垃圾回收机制?有会有很多场景,比如:我想优化代码,怎么组织代码逻辑,怎么深入设计模式等等,所以在阅读源码前,最好是带上一些问题,有目的才会有收获。从解压的源码包来看,内容居多,从何看起,那先要看自己的问题都有哪些?
-
1.学习源码的哪些内容?
- Python 内建对象 如何实例化的?(int、str、list、tuple、dist、float)
- Python 都有哪些可用的内置方法,如何实现的?
- Python 虚拟机执行字节码指令的过程,如何通过虚拟机实现各种表达式、控制流、异常机制、函数机制及类机制?
- Python运行环境的初始化、动态加载机制、多线程机制和内存管理机制(重要的垃圾回收机制)?
- 最后,想定制自己的方案,怎么实行?
- 等等
-
2.Python 大致都有哪些内容组成文章来源:https://www.toymoban.com/news/detail-404885.html
- 可执行模块:python内置模块、库 + 用户自定义的模块 + 第三方库 (这块 不是 重点)
- 运行时环境:包括对象/类型系统(Object/Type structures)、内存分配器(Memory Allocator)和 运行时状态信息(Current State of Python)。
- 运行时状态维护了解释器在执行字节码时不同的状态(比如正常状态和异常状态)之间切换的动作,我们可以将它视为一个巨大而复杂的有穷状态机。
- 内存分配器则全权负责Python中创建对象时,对内存的申请工作,实际上它就是Python运行时与C中malloc的一层接口。
- 而对象/类型系统则包含了Python中存在的各种内建对象,比如整数、list、dict,以及各种用户自定义的类型对象。
- 核心解释器(interpreter 或 虚拟机):在解释器中
- Scanner对应词法分析,将文件输入的Python源代码或从命令行输入的一行行Python代码切分为一个个的token;
- 给到Parser对应语法分析,在Scanner的分析结果上进行语法分析,建立抽象语法树(AST);
- Compiler是根据建立的AST生成指令集合 - Python字节码(byte code),就像Java编译器和C#编译器所做的那样;
- 最后由Code Evaluator来执行这些字节码。因此,Code Evaluator又可以被称为虚拟机。
-
3.源码可以直接使用 VS code 编辑器直接打开,进行阅读,建议通过笔记或画图的方式,记录阅读过程文章来源地址https://www.toymoban.com/news/detail-404885.html
参考
- Changing CPython’s Grammar
- Abstract Syntax Trees
到了这里,关于【Python】源码目录结构及阅读方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!