0. Python3源码—编译

简介: # 0.1. 整体架构 在最高的层次上,Python的整体架构可以分为三个主要的部分: * 左:Python提供的大量的模块、库以及用户自定义的模块; * 右:Python的运行时环境,包括对象/类型系统(Object/Type structures)、内存分配器(Memory Allocator)和运行时状态信息(Current State of Python); * 中:Python的

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_METHODDEF
    BUILTIN_ORD_METHODDEF
    BUILTIN_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源码剖析
目录
相关文章
|
16天前
|
Python
Python如何把脚本编译成可执行exe文件_python脚本编译成可执行文件
Python如何把脚本编译成可执行exe文件_python脚本编译成可执行文件
|
17天前
|
存储 缓存 API
python源码解读_python代码解释
python源码解读_python代码解释
|
19天前
|
Python
10个Python绘画表白代码【内附源码,再不收藏你只能单身了】_有趣的python代码表白
10个Python绘画表白代码【内附源码,再不收藏你只能单身了】_有趣的python代码表白
|
19天前
|
数据安全/隐私保护 Python 算法
Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,2024年最新Python面试回忆录
Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,2024年最新Python面试回忆录
|
22天前
|
Python
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
24 0
|
22天前
|
存储 Python
Python 基于列表实现的通讯录管理系统(有完整源码)
Python 基于列表实现的通讯录管理系统(有完整源码)
41 0
|
22天前
|
数据采集 人工智能 数据库
【Python毕业设计】Python二手房拍卖网抓取工具设计与实现(源码+毕业论文)【独一无二】
【Python毕业设计】Python二手房拍卖网抓取工具设计与实现(源码+毕业论文)【独一无二】
|
22天前
|
编解码 人工智能 IDE
【python毕业设计】Python基于Pygame的跑酷游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】Python基于Pygame的跑酷游戏设计与实现(源码+毕业论文)【独一无二】
|
22天前
|
机器学习/深度学习 人工智能 算法
【Python毕业设计】python基于CatBoost模型的混凝土强度预测研究(源码+数据集+毕业论文)【独一无二】
【Python毕业设计】python基于CatBoost模型的混凝土强度预测研究(源码+数据集+毕业论文)【独一无二】
|
22天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】