写代码的时候遇到一个问题,排查出现的原因后便想调试下Python解释器来跟踪是怎么实现的,众所周知,Python官方版本的解释器是C语言的实现的CPython,那先从编译CPython解析器开始吧。
环境准备
1、CPython的源码直接从官网或者通过git从Github上获取,这里我使用的是Python 3.7.7
版本
2、按照官方文档,Python 3.6
版本以上需要安装Visual Studio 2017
,相关的开发组件我此前已经安装过,这里列出组件吧:
目录结构
1、先看一下源码的顶级目录结构和各个目录的作用:
1 | Length Name |
关于EBNF可查看:
https://zh.wikipedia.org/wiki/%E6%89%A9%E5%B1%95%E5%B7%B4%E7%A7%91%E6%96%AF%E8%8C%83%E5%BC%8F
2、下载源代码依赖:
以管理员身份运行PowerShell进入PCbuild
目录(不以管理员身份运行可能在Fetch OpenSSL时遇到无权限的问题)
1 | > .\get_externals.bat |
完成后会在解释器目录中生成externals
文件夹,下载的依赖均在此文件夹中。
进行编译
1、完成上述几步后,进入PCbuild
目录双击pcbuild.sln
,等待解决方案加载完成:
2、在工具栏上调整DEBUG -> X64
3、解决方案->右键->属性->配置,可以看到解决方案中列出的项目,这里可以选择自己关心的项目再生成解决方案
4、启动本地Windows调试器
5、完成后会弹出解释器控制台,生成的目录为PCbuild/amd64
,其中包含解释器python_d.exe和内核python37_d.dll
1 | Mode LastWriteTime Length Name |
弹出的解释器控制台如图:
接下来就可以通过调试源码来查看我关心的问题如何实现的了🤓
参考
1、https://zh.wikipedia.org/wiki/CPython
2、https://devguide.python.org/setup/#windows
3、https://cpython-core-tutorial.readthedocs.io/en/latest/build_cpython_windows.html
4、https://devguide.python.org/setup/#directory-structure
5、https://devguide.python.org/exploring/#cpython-source-code-layout