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

这篇具有很好参考价值的文章主要介绍了【Python】源码目录结构及阅读方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Date: 2021.4.10
Author: jwensh

1. 下载

直接去python官网,下载源码,这个源码阅读,看你的需要来选择版本,你可以选择最新版本,来查看新版本更新的内容细节,或者你选择你当前学习或工作使用的版本:
【Python】源码目录结构及阅读方式
我下载了 Python3.9.4 版本

2. 目录结构

  • Python源码压缩包,解压后目录结构为:
    -【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   # 安装使用的脚本
  • 源码首要关注的目录: 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 编辑器直接打开,进行阅读,建议通过笔记或画图的方式,记录阅读过程文章来源地址https://www.toymoban.com/news/detail-404885.html

参考

  • Changing CPython’s Grammar
  • Abstract Syntax Trees

到了这里,关于【Python】源码目录结构及阅读方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java数据结构学习和源码阅读(线性数据结构)

    链表的数据结构 一组由节点组成的数据结构,每个元素指向下一个元素,是线性序列。 最简单的链表结构: 数据 指针(存放执行下一个节点的指针) 不适合的场景: 需要循环遍历将导致时间复杂度的提升 链表分类—单向链表 链表结构: 数据 指针 Next(指向下一个节点)

    2024年02月12日
    浏览(46)
  • python项目结构示例(python代码结构、python目录结构)与python部署结构、python部署目录、flask项目结构、flask目录

    myproject/ :项目的根目录,也是Python包的根目录。 myproject/__init__.py :一个空的 __init__.py 文件,用于将 myproject 目录标记为一个Python包。 myproject/module1.py 、 myproject/module2.py 等:项目的模块文件,包含项目的核心代码。 tests/ :测试目录,包含用于测试项目代码的测试文件。

    2024年02月12日
    浏览(62)
  • ncnn源码阅读(三)----数据结构Mat

    个人认为一个框架中的比较核心的两个点,一个是数据结构,一个任务调度。两者之间其实是相互独立的,数据结构为调度过程中的数据流动提供了一个载体。在ncnn中的数据结构是Mat,类似于OpenCV中的Mat,但又增加了一些属于它本身的一些特性,在这个部分学习一下ncnn的Mat

    2024年02月13日
    浏览(41)
  • 微信小程序入门及开发准备,申请测试号以及小程序开发的两种方式,目录结构说明

    目录 1. 介绍 1.1 优点 1.2 开发方式 2. 开发准备 2.1 申请 2.2 申请测试号 2.2 小程序开发的两种方式 2.3 开发工具 3. 开发一个demo 3.1 创建项目 3.2 配置 3.3 常用框架 3.3 目录结构说明 3.4 新建组件 是一种不需要下载安装即可使用的应用,是一种 触手可及 的应用 可以借助微信的流量

    2024年02月05日
    浏览(47)
  • YOLOv5源码逐行超详细注释与解读(1)——项目目录结构解析

    前面简单介绍了YOLOv5的网络结构和创新点(直通车:【YOLO系列】YOLOv5超详细解读(网络详解)) 在接下来我们会进入到YOLOv5更深一步的学习,首先从源码解读开始。 因为我是纯小白,刚开始下载完源码时真的一脸懵,所以就先从最基础的 项目目录结构 开始吧~因为相关解读

    2024年02月03日
    浏览(52)
  • Apache(2.4.49 2.4.50)--目录遍历--命令执行--(CVE-2021-42013)&&(CVE-2021-41773)

    采用Vulfocus靶场环境进行复现,搭建操作和文章参考具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败。 Apache HTTP Server是美国阿帕奇(Apache)基金会的一款开源网页服务器。该服务器具有快速、可靠且可通过简单的API进行扩充的特点,发现 Apache HTTP Server 2.4.50 中针

    2024年02月08日
    浏览(42)
  • 《论文阅读》LORA:大型语言模型的低秩自适应 2021

    前言 今天为大家带来的是《LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS》 出版: 时间:2021年10月16日 类型:大语言模型的微调方法 : 作者:Edward Hu, Yelong Shen 等 第一作者机构:Microsoft Corporation github:https://github.com/microsoft/LoRA 简介 为了降低现有模型在下游任务上的计算

    2024年02月05日
    浏览(47)
  • 小样本目标检测综述__刘浩宇(导航与控制2021)论文阅读

    早期采用了大量标注样本回归候选框的位置,但后来 目标集和训练集数据分布不同导致检测效果下降 。 对于没有大量样本支持的小样本检测应用就需要使用 先验知识 来弥补样本的不足。 可以分为三类: 数据域 通过先验知识来做数据增强,以弥补样本不足的问题,解决模

    2024年02月12日
    浏览(51)
  • grafana 目录遍历(CVE-2021-43798)漏洞复现【VULFOCUS靶场-中级】--拿flag的历程

    漏洞名称 : grafana 目录遍历 (CVE-2021-43798) 漏洞描述 : Grafana 是一个用于监控和可观察性的开源平台。Grafana 版本 8.0.0-beta1 到 8.3.0(补丁版本除外)容易受到目录遍历,允许访问本地文件。易受攻击的 URL 路径是: grafana_host_url/public/plugins// ,其中是任何已安装插件的插件 ID。

    2024年02月15日
    浏览(38)
  • 【python】爬取斗鱼直播照片保存到本地目录【附源码+文末免费送书】

    英杰社区 https://bbs.csdn.net/topics/617804998     这篇博客将介绍如何使用Python编写一个爬虫程序,从斗鱼直播网站上获取图片信息并保存到本地。我们将使用 request s 模块发送HTTP请求和接收响应,以及 os 模块处理文件和目录操作。         如果出现模块报错         进入控

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包