通常,我们使用的绝大多数Python解析器,就是CPython的,它是用C语言实现的Python解析器,为我们提供了一个编写可扩展及高性能应用程序的平台。这里主要是记录下构建自己的Python解析器的过程,为后续深入了解源码做一些准备。

源码下载

git clone --branch 3.9 https://github.com/python/cpython


下载后目录结构如下所示:

构建Python解析器_python

接下来使用VSCode来打开这个cpython的文件夹,为了方便管理项目的各个任务,这里新建一个文件:.vscode/tasks.json:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "type": "shell",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "osx": {
                "command": "make -j2 -s"
            }
        }
    ]
}

然后就可以看到任务了【需要安装插件:spmeesseman.vscode-taskexplorer】:

构建Python解析器_解析器_02

另外,在构建前还需要执行命令brew install openssl xz zlib gdbm sqlite来安装一些前置包。

安装了包后,如果想已安装的包的目录,可以执行命令brew --prefix [包名]来查看。

生成makefile

执行命令[CPPFLAGS="-I$(brew --prefix zlib)/include" LDFLAGS="-L$(brew --prefix zlib)/lib" ./configure --with-openssl=$(brew --prefix openssl) --with-pydebug]来生成makefile。

构建Python解析器

执行命令make -j2 -s来生成python解析器。

构建Python解析器_python_03

可以发现,生成的文件是python.exe,这是为了避免在开发运行时调用了系统默认的python,在make install或make altinstall时不会有.exe的后缀。

另外可以发现,源码这里有很多构建目标:

构建Python解析器_解析器_04

这里先不深究,反正估计也会第二天忘记😂,想用到啥功能再逐个探究了。可以进入REPL看看:

构建Python解析器_python_05

Windows平台下的调试构建

在源码目录下的PCbuild文件夹可以看到有这个文件:

构建Python解析器_python_06

打开看看。不同版本的IDE,需要变更一下SDK,选择自己电脑的即可:

构建Python解析器_python_07

接下来到【生成】-【配置管理器】确认下配置:

构建Python解析器_解析器_08

然后点击【生成】-【生成解决方案】即可开始构建:

构建Python解析器_python_09

出现了这个报错,缺少了一些外部依赖,可以执行一下PCbuild文件夹下面的get_externals.bat脚本来安装一下:

构建Python解析器_python_10

然后重新生成解决方案即可:

构建Python解析器_python_11

构建Python解析器_解析器_12

为了方便后面调试,可以如下配置:

【工具】-【python】-【python环境】

构建Python解析器_python_13

添加python环境:

构建Python解析器_python_14

添加后,点击打开交互窗口看看:

构建Python解析器_python_15

构建Python解析器_解析器_16

后续在visual studio中,对应源码设定断点,就可以快速打开调试模式了。