0. Python3源码—编译
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源码—编译相关推荐
- [转组第10天] | Android6.0.0_r1源码编译和POC程序的编译
2018-05-23 Android6.0.0_r1源码编译 简要说明:android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4运行.下文也将按照该流程讲述. 主机环境 Ub ...
- Python3源码编译和使用静态链接库lib动态链接库dll详细介绍
说明: 本文主要介绍: 1.python3源码的下载和编译内核工程(pythoncore) 2.编译的lib和dll使用例子. 若需要编译源码PCBuild下其他python工程,类似参考内核工程(p ...
- MySQL 8.0.22 源码编译安装全过程
墨墨导读: Mysql的8.0版本出来已经有一段时间了,近期研究下源码调试.整个编译过程越来越复杂了. 近期研究下源码调试,MySQL5.7版本源码安装还是比较简单的,有很多例子参考.所以这次选择My ...
- Android9.0 系统源码编译
两个多月没写博客了,感觉不会再爱了.Android P 发布已经好久了,今天来尝一尝这块Pie. 编译环境 Ubuntu18.04, 双系统环境 PC机,内存32G,CPU 16 核心,I7八代. 源 ...
- Jetson TX1刷机教程(解决Auvidea carrier boards(2x USB3.0)+ 源码编译安装opencv3.2存储空间不足问题)
最近一周感觉都是在给Jetson TX1刷机,然而每次都得各种查资料,然后从师兄那得到启示(养成记录的好习惯),感觉是时候写下刷机的心路历程了. Jetson TX1刷机不难,直接跟着官方教程走就行D ...
- android8.1内核编译,Android8.1.0安卓源码编译
换中科大源18.04 由于新安装的Ubuntu默认配置为Ubuntu官方源,基本软件包下载速度较慢,下面修改软件源: 备份下sources.list sudo cp /etc/apt/sources. ...
- Android8.1.0安卓源码编译
换中科大源18.04 由于新安装的Ubuntu默认配置为Ubuntu官方源,基本软件包下载速度较慢,下面修改软件源: 备份下sources.list sudo cp /etc/apt/sources. ...
- mongodb 4.0.3 源码编译【1】编译指南的翻译
[原始文档] mongodb-src-r4.0.3.zip\mongodb-src-r4.0.3\docs\building.md [翻译] 编译 MongoDB ================ 编 ...
- android 8.0.0-r1 源码编译遇到的问题build/core/main.mk:21: recipe for target 'run_soong_ui' failed 解决
好处:使用studio查看源码的时候,如果不生成.ipr .iml文件,查看的Java文件是无法索引到其他的文件的,需要一个一个的搜索,很不方便,而.ipr .iml文件就可以解决这部分问题,而且它还 ...
最新文章
- python函数拟合不规则曲线_python中的多变量(多项式)最佳拟合曲线?
- 剑指offer:和为S的连续正数序列
- 基于Selenium2与Python自动化测试环境搭建
- ASP.NET控件事件丢失的探究
- react中遇到的问题
- 查看系统各个进程打开的文件描述符数量
- 如何与人交流——程序员,赶紧生个孩子吧!
- ifm virtual check part3
- Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- SpringBoot执行流程
- 四天学会Mybatis
- 突破开源Redis的内存限制,存算分离的GaussDB到底有多能“装”?
- 解决maven项目没有Maven Dependencies
- BAT频繁与移动医疗挂钩 预示行业即将爆发?
- 提高计算机访问硬盘的速度慢,嫌电脑速度不够快?教你5招提升硬盘性能!
- java正整数正则表达式_Java 正则表达式
- eclipse安装中文补丁包
- 使用FastReport进行基于富盛SBO程序开发框架的报表开发
- dw中css制作导航,四点告诉你Dreamweaver中制作漂亮导航条的方法
- Excel聚光灯--双箭头指示
热门文章
- python print_Python print()
- python当前日期时间_Python当前日期时间
- c ++向量库_C ++中的2D向量–实用指南2D向量
- web前端开发示例_40多个针对Web开发人员HTML5教程和示例
- 什么是接口?如何定义接口?如何实现接口?
- FireFox 在新建标签页插入“片段”广告引社区争议
- 点击编辑table变为可编辑状态
- 婚纱摄影五大标杆品牌告诉你,客资转化居然可以这么玩?
- iOS:using Segue in Popover
- 【最大连接数】Linux的文件最大连接数