1-折腾Python解释器的基础

本文介绍了一个有趣的系列,旨在深入浅出地分析Python解释器的内部实现,通过修改源码实现诸如让True变成False等玩笑。文章详细讲解了下载Python3.10.2解释器源码和Visual Studio 2022RC的安装过程,并指导如何运行和编译源码,最终实现修改解释器输出,为后续的恶搞铺垫。
摘要由CSDN通过智能技术生成

前言

这个系列主要在"恶搞"python解释器的引导下,深入浅出地分析这个动态语言的内部实现,不会特别专业但是一定有趣!比如我们可以实现让这个解释器把"True"打印成"False"这种低级的玩笑,也可以让1+1=3,更能改变程序运行逻辑,出现一些意想不到的好笑结局! 下面我们来为这个"玩笑"做准备吧.

下载

需要用到的链接都在下面:
python3.10.2解释器源码(官网上下的,自己传一遍下载更快)
(可自动填充)提取码:3uuv
visual studio 2022RC,installer,需要自己装那几个G
(可自动填充)提取码:kzfx

安装

把python解释器源码解压到一个合适的路径,最好不要带空格和中文(以防万一嘛)
安装vs,可以参照网上教程,不贴链接了.其实就一句话,安装VS2022RC版,社区版,仅仅选择如下即可:
"使用C++的桌面开发"
自己选安装路径之类的,这可是个大家伙所以一定要谨慎又谨慎,而且装错了很难卸载(我今天盘了半个小时才手动删干净)

ok,来看看能不能跑

我的源码解压到D:\pysrc了,如下:
目录
这时候找到PCBuild目录,打开它,翻到一个叫做pcbuild.sln的vs解决方案配置文件,如果vs安装正常并重启,应该会自动注册打开方式,反正用vs2022打开它.
vs启动页
如下,不管他直接ok(下面的步骤只需要第一次运行,之后没这么麻烦)
配置界面1
程序会直接失去响应好久,一定要等着!等到底!(当然如果你的pc比我好那不用说)
程序未响应
打开之后,按照你自己的布局(估计跟我不一样),找到"解决方案管理器"之类的(我是英文,翻译过来可能不一样):
打开解决方案管理
找到项目pythoncore,就是我已经展开了的那一个,就可以看见它的源码啦.
这里解释下几个重要目录(其他的有参考书,可下载,提取码:tfa9,这是py2的版本,但是将就看吧,网络上也有的是)(咱考虑的不那么深,并不是要把这全都吃透,开心最重要~)
Include 包含目录,如要扩展解释器(从外部),需要用到,解释器内部也需要(这么说好多废话诶)
Modules 内置模块,math之类的不能用python脚本实现,只能用c写,或者需要高效的内置库,也只能c写,另一篇文章分析语言的效率差距可以解释.
Objects 顾名思义python"对象"的核心,一切对象的根源就在此,我们的一些低级玩笑也在这里施展(手动滑稽)
Parser 像我这种写过编译器的,都看得懂,“语法解析”
PC 应该是win平台相关的,我也没看大懂
Python 驱动整个解释器的运行(毕竟项目叫core)
其他没了

下面试着编译一下,摁F5.
编译的场景
慢慢等着吧,有点慢.编译完成后会出现熟悉的窗口:Python3.10.2(但是多了个d表示debug)
编译完成
我们可以试着输出下,就跟初步入门一样:
输入一些常用的语句
下面来踏入恶搞的大门吧!关掉这个解释器进程,修改代码.(哦对了,这个编译的时候可能_ctypes出问题,但是没任何关系,他会提示没有ffi.h,然而咱windows平台编译这个库很…麻烦)
修改代码
找到Objects/boolobject.c,修改第18行和21行(知道我要干什么吧)成自己喜欢的字符串.
修改后!
我也是足够无聊了…编译运行:(F5,以后不多说,会玩vs的别嫌弃)
试着输入一个a=True?嗯哼没反应.解释器响应了">>>"
打印一个a试试?!
打印a的值
哈哈哈哈成功!试试print函数呢
打印"True"的False
十分地成功嘛!下一步,就可以删掉后面的一句提示语,然后把解释器打包发给你的朋友,说"最新版的python,我用源码把它优化了一下,你试试"…然后嘛,大家都会

下节预告

下篇文章,我们继续玩一些向屏幕打印奇怪信息的小把戏,熟悉一下vs的操作,这样更好玩弄可怜的py源码~点我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dtsroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值