4.6 在 Windows 上编译 CPython

有两种方法可以从 Windows 编译 CPython 二进制文件和库。

第一种从命令行编译,这需要用到 Visual Studio 自带的 Microsoft Visual C++ 编译器。第二种是通过 Visual Studio 打开 PCBuild/pcbuild.sln 直接进行构建。

安装依赖项

不论使用命令行还是 Visual Studio 进行编译,你都需要安装一些外部工具、库和 C 头文件。

PCBuild 文件夹中有一个 .bat 文件,可以为你自动执行上述安装操作。

PCBuild 中打开命令行并执行 get_externals.bat

> get_externals.bat
Using py -3.7 (found 3.7 with py.exe)
Fetching external libraries...
Fetching bzip2-1.0.6...
Fetching sqlite-3.28.0.0...
Fetching xz-5.2.2...
Fetching zlib-1.2.11...
Fetching external binaries...
Fetching openssl-bin-1.1.1d...
Fetching tcltk-8.6.9.0...
Finished.

现在你可以从命令行或 Visual Studio 进行编译了。

从命令行编译

从命令行进行编译时,需要选择要编译的 CPU 架构。默认值为 win32,但你可能需要 64 位 (amd64) 二进制文件。

如果你进行任何调试,调试版本提供了在源代码中添加断点的能力。要构建调试版本,请添加 -c Debug 以指定调试配置。

默认情况下,build.bat 将获取外部依赖项,但由于我们已经完成了该步骤,它会打印一条跳过下载的消息:

> build.bat -p x64 -c Debug

此命令将生成 Python 二进制文件 PCbuild/amd64/python_d.exe。该二进制文件可以直接从命令行启动:

> amd64\python_d.exe

Python 3.9.0b1 (tags/v3.9.0b1:97fe9cf, May 19 2020, 10:00:00)
[MSC v.1922 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

现在已经进入了你编译的 CPython 二进制文件的 REPL 中。

要编译二进制文件发行版:

> build.bat -p x64 -c Release

上述命令将生成二进制文件 PCbuild/amd64/python.exe

后缀 _d 表明 CPython 是基于 Debug 配置构建的。

python.org 上发布的二进制文件在基于 Profile-Guided-Optimization (PGO) 配置编译的。有关 PGO 的更多详细信息,请参阅本章末尾的 Profile-Guided-Optimization (PGO) 部分。

参数

build.bat 支持以下参数:

标记作用可选值

-p

指定构建平台的 CPU 架构

x64Win32 (默认值),ARMARM64

-c

指定构建配置

Release (默认值),DebugPGInstrumentPGUpdate

-t

指定构建目标

Build (默认值),RebuildCleanCleanAll

标记

下面是一些可用于 build.bat 的可选标志。如需完整列表,请运行 build.bat -h

标记作用

-v

详细模式。在构建期间显示信息性消息

-vv

非常详细的模式。在构建期间显示详细消息

-q

安静模式。仅在构建期间显示警告和错误

-e

下载并安装外部依赖项(默认)

-E

下载和安装外部依赖项

--pgo

编译时开启 PGO

--regen

当更新语言时,使用该选项重新生成新语法和 token

从 Visual Studio 编译

PCBuild 文件夹中有一个 Visual Studio 解决方案文件 PCBuild/pcbuild.sln,其用于构建和探索 CPython 源代码。

加载解决方案文件时,它会提示将解决方案中的项目重定向到安装的 C/C++ 编译器版本。Visual Studio 也会定位已安装的 Windows SDK 的版本。

确保将 Windows SDK 版本更改为最新安装的版本,并将平台工具集更改为最新版本。如果错过了这个窗口,你可以在 Solutions and Projects 窗口中右键单击解决方案文件,然后单击 Retarget Solution

导航到 Build/Configuration Manager,确保 Active solution configuration 设置为 Debug 且 Active Solution Platform 设置为 x64(64 位 CPU 架构)或 win32(32 位)。

接下来,通过按 CTRL + SHIFT + B 或选择 Build/Build Solution 来构建 CPython。若收到有关缺少 Windows SDK 的任何错误,请确保在 Retarget Solution 窗口中设置了正确的定位设置。在开始菜单中应该能看到 Windows Kits 文件夹,文件夹内有 Windows Software Development Kit(Windows 软件开发工具包)。

第一次构建可能需要 10 分钟或更长时间。构建完成后,可能会看到一些可以忽略的警告。

若需启动调试版本的 CPython,请按 F5,CPython 将以调试模式启动且直接进入 REPL:

图片不翻译。

你可以通过在顶部菜单栏上将构建配置从 Debug 更改为 Release 并重新运行 Build/Build Solution,来运行发布版本的构建。现在在目录 PCbuild/amd64 中同时拥有了 Python 二进制文件的调试和发布版本。

通过在顶部菜单中选择 Tools/Python/Python Environments,可以将 Visual Studio 设置为使用发布或调试版本打开 REPL。在 Python Environments 面板中,单击 Add Environment,然后可以选择调试或发布二进制文件作为目标。调试二进制文件以 _d.exe 结尾,例如 python_d.exepythonw_d.exe

你或许更希望使用调试二进制文件,因为它在 Visual Studio 中提供调试支持,这在你通读本书时会很有用。

在 Add Environment 窗口中,分别将解释器路径和窗口解释器设置为 PCbuild/amd64 中的 python_d.exe 文件和 pythonw\_d.exe 文件:

图片不翻译。

在 Python Environments 窗口中单击 Open Interactive Window 来启动 REPL 会话,你将看到 Python 编译版本的 REPL:

图片不翻译。

本书中将有带有示例命令的 REPL 会话。如果你想在代码中设置任何断点,我鼓励使用调试二进制文件来运行这些 REPL 会话。

为了更轻松地浏览代码,在 Solution 视图中,单击 Home 图标旁边的切换按钮以切换到 Folder 视图:

图片不翻译。

Last updated