Python源码剖析之编译Python

摘要:
它包括对象/类型结构、内存分配器和Python的当前状态。事实上,它是Python运行时和C中的malloc之间的接口。对象/类型系统包括Python中的各种内置对象。从文件输入的Python源代码或从命令行输入的Python代码分为标记:

在剖析源码的过程中,最好的学习方法是不断根据掌握的知识修改Python源代码,以印证自己的知识和猜想。

一、Python总体架构

Python源码剖析之编译Python第1张

  在最高的层次上,Python的整体架构可以分为三个主要部分,如上图,左边的Core Modules(内置模块)、Library(库)以及User-defined Modules(用户自定义模块)。

  在图的右边,是Python的运行时环境,包括对象/类型系统(Object/Type stuctures)、内存分配器(Memory Allocator)和运行时状态信息(Current State of Python )。运行时状态维护了解释器在执行字节码时不同的状态(比如正常状态和异常状态)之间切换的动作,我们可以将它视为一个巨大而复杂的有穷状态机。内存分配器则全权负责Python中创建对象时,对内存的申请工作,实际上它就是Python运行时与C中malloc的一层接口。而对象/类型系统则包含了Python中存在的各种内建对象,比如整数、list和dict,以及各种用户自定义的类型和对象。

  中间的部分,是python的核心——解释器(interpreter),也称为虚拟机。在解释器中,箭头的方向指示了Python运行过程中的数据流方向。其中Scanner对应词法分析,将文件输入的Python源代码或从命令行输入的一行行Python代码切分为一个个的token(指令): Parser对应语法分析,在Scanner的分析结果上进行语法分析,建立抽象语法树(AST):Compiler(编译器)是根据建立的AST生成指令集合——Python字节码(byte code),最后由Code Evaluator来执行这些字节码。因此,Code Evaluator又可以被称为虚拟机。

  图中,在解释器与右边的对象/类型系统、内存分配器之间的箭头表示"使用"关系;而与运行时状态之间的箭头表示“修改”关系,即Python在执行的过程中会不断地修改当前解释器所处的状态,在不同的状态之间切换。

二、Python源代码结构

  Python源码下载地址:https://www.python.org/downloads/

  选择相应的版本下载,本文以最新版Python3.5.1进行分析。  wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

  下载了Python源码并解压后可以看到如下图所示的目录结构:

  Python源码剖析之编译Python第2张

  Include:  该目录下包含了Python提供的所有头文件,如果用户需要自己用C或C++来编写自定义模块扩展Python,就需要用到这里提供的头文件。

  Lib:    该目录包含了Python自带的所有标准库,Lib中的库都是用Python语言编写的。

  Modules:  该目录中包含了所有用C语言编写的模块,比如random、cStringIO等。Modules中的模块是那些对速度要求非常严格的模块,而有一些对速度没有太严格要求的模块,比如os,就是用Python编写的,并且放在Lib目录下。

  Parser:  该目录中包含了Python解释器中的Scanner和Parser部分,即对Python源代码进行词法分析和语法分析的部分。除了这些,Parse目录下还包含了一些有用的工具,这些工具能够根据Python语言的语法自动生成Python语言的词法和语法分析器,与YACC非常类似。

  Objects:  该目录中包含了所有Python的内建对象,包括整数、list、dict等。同时,该目录还包括了Python在运行时需要的所有的内部使用对象的实现。

  Python:  该目录下包含了Python解释器中的Compiler和执行引擎部分,是Python运行的核心所在。

三、编译安装

  ./configure

  make all 

  make install

  

  

  

免责声明:文章转载自《Python源码剖析之编译Python》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#.NET防止SQL注入式攻击RabbitMQ 运转流程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一个简单的项目介绍流程

以一个简单的项目进行介绍说明: • 最近测试的Tpshop项目是一个B/S架构的Web项目。Tpshop是一个 B2C的电商平台系统,运营模式类似于天猫,京东这些B2C类型网站。 • 项目系统由前台和后台两部分构成。前台面向购物用户,包括会员、商品展示、购物车、订单、支付、用户中心等系统模块。后台面向经营商家,包括商品管理,会员管理,订单处理等系统模块。...

C#基础系列——多线程 信号量 异步 编程 Task Thread async和await

 多线程: ThreadStart 是一个委托函数 static void Main(string[] args) { Thread oGetArgThread = new Thread(new ThreadStart(() => {...

邂逅Sass和Compass之Compass篇

本文主要讲解Compass的内容,众所周知Compass是Sass的工具库,如果对Sass不甚了解的同学可以移步 邂逅Sass和Compass之Sass篇 Sass本身只是一个“CSS预处理器”,Compass在它的基础上,封装了一系列的模块和模板,补充了Sass的功能。 1.Compass的安装 和Sass一样,Compass也是用Ruby语言开发的,所...

查阅Springboot官方文档方式----------------Springboot2.0.2最新稳定版

1、登录官方网址:                  https://spring.io/     如图所示:                   2、选择PROJECTS,就可以看到spring所有的相关项目了。                     点开后:其中就包括了Spingboot              3、版本选择,红圈部分就是最新的稳定...

Nginx 编译参数详解/大全

Nginx参数: –prefix= 指向安装目录 –sbin-path 指向(执行)程序文件(nginx) –conf-path= 指向配置文件(nginx.conf) –error-log-path= 指向错误日志目录 –pid-path= 指向pid文件(nginx.pid) –lock-path= 指向lock文件(nginx.lock)(安装文件锁...

PowerDesigner的样式设置

PD提供了强大的配置功能,可以对生成的数据库对象命名、数据模型的展现进行设置。这里首先讲下样式的设置。 颜色和字体设置 1.单独设置某个对象的颜色和字体 1.1修改实体填充色 (1)单击选中某个需要修改填充色的实体。 (2)右击,在弹出式菜单中选择“Format”选项,系统将弹出格式化窗口。 (3)切换到“Fill”选项卡中,选择Fill color为白色...