0.1. 整体架构

在最高的层次上,Python的整体架构可以分为三个主要的部分:

  • 左:Python提供的大量的模块、库以及用户自定义的模块;
  • 右:Python的运行时环境,包括对象/类型系统(Object/Type structures)、内存分配器(Memory Allocator)和运行时状态信息(Current State of Python);
  • 中:Python的核心——解释器(interpreter),或者称为虚拟机,包括词法分析(Scanner),语法分析(Parser),Compiler和Code Evaluator;

0.2. 目录组织

  • Include :该目录下包含了Python提供的所有头文件,如果用户需要自己用C或C++来编写自定义模块扩展Python,那么就需要用到这里提供的头文件;
  • Lib :该目录包含了Python自带的所有标准库,Lib中的库都是用Python语言编写的;
  • Modules :该目录中包含了所有用C语言编写的模块,比如random、StringIO等。Modules中的模块是那些对速度要求非常严格的模块,而有一些对速度没有太严格要求的模块,比如os,就是用Python编写,并且放在Lib目录下的;
  • Parser :该目录中包含了Python解释器中的Scanner和Parser部分,即对Python源代码进行词法分析和语法分析的部分;
  • Objects :该目录中包含了所有Python的内建对象,包括整数、list、dict等;
  • Python :该目录下包含了Python解释器中的Compiler和执行引擎部分,是Python运行的核心所在;

0.3. 编译源码

./configure -prefix=/Users/l.wang/Documents/pythonindepth
make
make install

0.4. 修改源码

试验一下修改源码再编译,此处修改会影响Python中的print方法,多输出一条hello world。

//bltinmodule.c
static PyMethodDef builtin_methods[] = {// ……BUILTIN_OCT_METHODDEFBUILTIN_ORD_METHODDEFBUILTIN_POW_METHODDEF{"print",           (PyCFunction)builtin_print,      METH_FASTCALL | METH_KEYWORDS, print_doc},// ……
};static PyObject *
builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{PyObject* str = PyUnicode_FromString("hello world\n");PyObject_Print(str, stdout, Py_PRINT_RAW);// ……
}

重新make及make install,运行Python,打印:

0.5 参考

  • Python源码剖析

0. Python3源码—编译相关推荐

  1. [转组第10天] | Android6.0.0_r1源码编译和POC程序的编译

    2018-05-23 Android6.0.0_r1源码编译 简要说明:android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述. 主机环境 Ub ...

  2. Python3源码编译和使用静态链接库lib动态链接库dll详细介绍

    说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...

  3. MySQL 8.0.22 源码编译安装全过程

    墨墨导读: Mysql的8.0版本出来已经有一段时间了,近期研究下源码调试.整个编译过程越来越复杂了. 近期研究下源码调试,MySQL5.7版本源码安装还是比较简单的,有很多例子参考.所以这次选择My ...

  4. Android9.0 系统源码编译

    两个多月没写博客了,感觉不会再爱了.Android P 发布已经好久了,今天来尝一尝这块Pie. 编译环境 Ubuntu18.04, 双系统环境 PC机,内存32G,CPU 16 核心,I7八代. 源 ...

  5. Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)

    最近一周感觉都是在给Jetson TX1刷机,然而每次都得各种查资料,然后从师兄那得到启示(养成记录的好习惯),感觉是时候写下刷机的心路历程了. Jetson TX1刷机不难,直接跟着官方教程走就行D ...

  6. android8.1内核编译,Android8.1.0安卓源码编译

    换中科大源18.04 由于新安装的Ubuntu默认配置为Ubuntu官方源,基本软件包下载速度较慢,下面修改软件源: 备份下sources.list sudo cp /etc/apt/sources. ...

  7. Android8.1.0安卓源码编译

    换中科大源18.04 由于新安装的Ubuntu默认配置为Ubuntu官方源,基本软件包下载速度较慢,下面修改软件源: 备份下sources.list sudo cp /etc/apt/sources. ...

  8. mongodb 4.0.3 源码编译【1】编译指南的翻译

    [原始文档] mongodb-src-r4.0.3.zip\mongodb-src-r4.0.3\docs\building.md [翻译] 编译 MongoDB ================ 编 ...

  9. android 8.0.0-r1 源码编译遇到的问题build/core/main.mk:21: recipe for target 'run_soong_ui' failed 解决

    好处:使用studio查看源码的时候,如果不生成.ipr .iml文件,查看的Java文件是无法索引到其他的文件的,需要一个一个的搜索,很不方便,而.ipr .iml文件就可以解决这部分问题,而且它还 ...

最新文章

  1. python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
  2. 剑指offer:和为S的连续正数序列
  3. 基于Selenium2与Python自动化测试环境搭建
  4. ASP.NET控件事件丢失的探究
  5. react中遇到的问题
  6. 查看系统各个进程打开的文件描述符数量
  7. 如何与人交流——程序员,赶紧生个孩子吧!
  8. ifm virtual check part3
  9. Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
  10. SpringBoot执行流程
  11. 四天学会Mybatis
  12. 突破开源Redis的内存限制,存算分离的GaussDB到底有多能“装”?
  13. 解决maven项目没有Maven Dependencies
  14. BAT频繁与移动医疗挂钩 预示行业即将爆发?
  15. 提高计算机访问硬盘的速度慢,嫌电脑速度不够快?教你5招提升硬盘性能!
  16. java正整数正则表达式_Java 正则表达式
  17. eclipse安装中文补丁包
  18. 使用FastReport进行基于富盛SBO程序开发框架的报表开发
  19. dw中css制作导航,四点告诉你Dreamweaver中制作漂亮导航条的方法
  20. Excel聚光灯--双箭头指示

热门文章

  1. python print_Python print()
  2. python当前日期时间_Python当前日期时间
  3. c ++向量库_C ++中的2D向量–实用指南2D向量
  4. web前端开发示例_40多个针对Web开发人员HTML5教程和示例
  5. 什么是接口?如何定义接口?如何实现接口?
  6. FireFox 在新建标签页插入“片段”广告引社区争议
  7. 点击编辑table变为可编辑状态
  8. 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
  9. iOS:using Segue in Popover
  10. 【最大连接数】Linux的文件最大连接数