【Python】源码目录结构及阅读方式

Date: 2021.4.10
Author: jwensh

1. 下载

直接去python官网,下载源码,这个源码阅读,看你的需要来选择版本,你可以选择最新版本,来查看新版本更新的内容细节,或者你选择你当前学习或工作使用的版本:

我下载了 Python3.9.4 版本

2. 目录结构

  • Python源码压缩包,解压后目录结构为:
    -【Python】源码目录结构及阅读方式_第1张图片
$ 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   # 安装使用的脚本
  • 源码首要关注的目录: IncludeObjectsModules

3. 阅读方式

  • 前提: 需要些写C语言的基础,不然看起来,会有些吃力,为什么需要C,那需要看你使用的是CPython 还是 JPython

当你开始阅读源码时,一定是有某些问题被背景,才会驶向这条航道,而我主要时为了了解,垃圾回收机制,而为什么需要了解python的垃圾回收机制?有会有很多场景,比如:我想优化代码,怎么组织代码逻辑,怎么深入设计模式等等,所以在阅读源码前,最好是带上一些问题,有目的才会有收获。从解压的源码包来看,内容居多,从何看起,那先要看自己的问题都有哪些?

  • 1.学习源码的哪些内容?

    • Python 内建对象 如何实例化的?(int、str、list、tuple、dist、float)
    • Python 都有哪些可用的内置方法,如何实现的?
    • Python 虚拟机执行字节码指令的过程,如何通过虚拟机实现各种表达式、控制流、异常机制、函数机制及类机制?
    • Python运行环境的初始化、动态加载机制、多线程机制和内存管理机制(重要的垃圾回收机制)?
    • 最后,想定制自己的方案,怎么实行?
    • 等等
  • 2.Python 大致都有哪些内容组成

    • 可执行模块: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 编辑器直接打开,进行阅读,建议通过笔记或画图的方式,记录阅读过程

参考

  • Changing CPython’s Grammar
  • Abstract Syntax Trees

你可能感兴趣的:(#,Python,python,cpython,opensource)