菜单

构建系统

相关源文件

CPython 构建系统负责在不同平台和各种功能配置下配置和构建 Python。本页面解释了构建过程的核心组件、如何使用构建系统以及其内部工作原理。有关特定平台的安装详情,请参阅 Python 官方文档。

概述

CPython 为不同平台有不同的构建系统

  • 类 Unix 系统(Linux、macOS、BSD):使用 Autoconf/configure/make
  • Windows:使用 PCbuild 目录中的 Visual Studio 项目文件
  • 交叉编译:针对 iOS、Android 和 WebAssembly 等平台的特殊配置

构建过程通常包括

  1. 检测平台功能和库
  2. 配置构建参数
  3. 编译 Python 核心和扩展模块
  4. 构建安装程序或包

来源:configure.ac1-102 Makefile.pre.in1-20 PCbuild/pythoncore.vcxproj1-20

类 Unix 构建系统

Configure 脚本

Unix 构建系统依赖 GNU Autoconf 从 configure.ac 创建一个 configure 脚本。该脚本会检测系统功能并生成构建所需的必要文件。

重新生成 configure 脚本(仅 CPython 开发者需要)

make regen-configure

运行 configure 时,您可以指定各种选项来定制构建

./configure --with-pydebug --enable-shared

来源:configure.ac11-26 configure1-60 Doc/using/configure.rst9-30

构建流程

配置完成后,您将使用 GNU Make 构建 Python

常用 make 目标

  • make:构建 Python
  • make test:运行测试套件
  • make install:安装 Python
  • make clean:清理构建产物
  • make regen-all:重新生成各种构建时生成的文件

来源:Makefile.pre.in270-305 Makefile.pre.in582-585

Windows 构建系统

Windows 构建系统使用 PCbuild 目录中的 Visual Studio 项目文件。

要在 Windows 上构建 Python,您可以使用:

PCbuild\build.bat -p x64 -c Release

选项包括:

  • -p:平台 (Win32, x64, ARM, ARM64)
  • -c:配置 (Debug, Release, PGInstrument, PGUpdate)
  • -d:Debug 构建(等同于 -c Debug
  • --experimental-jit:启用实验性 JIT 编译器

来源:PCbuild/pythoncore.vcxproj1-30 PCbuild/_freeze_module.vcxproj1-50

模块配置

Python 模块可以被

  1. 内置(作为核心解释器的一部分)
  2. 静态链接(编译到 Python 可执行文件/库中)
  3. 动态链接(构建为独立的 .so/.pyd 文件)

在 Unix 系统中,模块配置由以下文件控制:

  • Modules/Setup:配置哪些模块是静态构建的
  • Modules/Setup.bootstrap.in:配置引导所需模块

Windows 模块配置由 PCbuild 目录中的各种 .vcxproj 文件控制。

来源:Modules/Setup1-10 Makefile.pre.in21-27 PCbuild/pythoncore.vcxproj100-116

构建优化

CPython 支持多种构建优化

Profile-Guided Optimization (PGO) - 配置文件引导优化

PGO 通过使用从代表性工作负载运行中收集的配置文件数据来提高性能。

./configure --enable-optimizations

这会运行带有代码插桩的 Python,收集配置文件数据,然后用优化后的配置重新构建。

Binary Optimization and Layout Tool (BOLT) - 二进制优化和布局工具

BOLT 是一个链接后优化器,它重新排列代码以获得更好的指令缓存使用率。

./configure --enable-bolt

在安装了 LLVM 工具的 Linux 上可用。

JIT 编译器

Python 3.13+ 包含一个实验性 JIT 编译器。

./configure --enable-experimental-jit

适用于Windows

PCbuild\build.bat --experimental-jit

来源:configure.ac332-375 .github/workflows/jit.yml40-55 Makefile.pre.in333-347

Free-Threading 构建(无 GIL)

CPython 3.13+ 支持一个实验性构建,其中全局解释器锁 (GIL) 被禁用。

./configure --disable-gil

适用于Windows

PCbuild\build.bat --disable-gil

这定义了 Py_GIL_DISABLED 宏,并在 sys.abiflags 中添加 "t"。

来源:configure.ac289-302 .github/workflows/reusable-ubuntu.yml95-100

生成的代码

CPython 包含各种作为构建过程一部分的生成文件。

重新生成所有生成的文件

make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure

来源:Doc/using/configure.rst68-96 Makefile.pre.in572-583

CI/CD 流水线

CPython 使用 GitHub Actions 进行持续集成

CI 系统在多个平台和配置上构建和测试 Python,包括:

  • Windows (Win32, x64, ARM64)
  • macOS (Intel 和 Apple Silicon)
  • Ubuntu (x86_64 和 ARM64)
  • WASI (WebAssembly)
  • 专用构建(free-threading、JIT、thread sanitizer)

来源: .github/workflows/build.yml24-39 .github/workflows/reusable-windows.yml22-36 .github/workflows/reusable-macos.yml22-37 .github/workflows/reusable-ubuntu.yml27-44

交叉编译

CPython 支持交叉编译各种平台

关键的交叉编译选项

  • --with-build-python: 指定构建主机的 Python 解释器
  • --host: 指定目标平台三元组

对于 WebAssembly (WASI) 构建,还需要 WASI SDK 等附加工具。

来源: configure.ac148-177 .github/workflows/reusable-wasi.yml14-32 Makefile.pre.in176-208

配置选项

configure 脚本支持许多选项。一些重要的选项包括

选项描述
--enable-shared构建共享 Python 库 (libpython3.x.so)
--with-pydebug构建带调试符号的 Python
--enable-optimizations启用基于配置文件的优化 (PGO)
--enable-bolt启用二进制优化和布局工具 (BOLT)
--disable-gil构建时支持自由线程(无 GIL)
--enable-experimental-jit启用实验性 JIT 编译器
--with-openssl指定用于 SSL/TLS 支持的 OpenSSL 目录
--with-system-expat使用系统提供的 Expat 库
--with-ensurepip在安装 Python 时安装 pip

有关完整列表,请运行 ./configure --help 或参考 配置过程页面。

来源: Doc/using/configure.rst99-158 configure.ac1042-1175

总结

CPython 构建系统是一个复杂但灵活的系统,它适应多种平台、配置和优化技术。它允许 Python 使用不同的功能、优化以及为各种目标平台进行构建。

相关页面请参见

来源: configure1-10 Makefile.pre.in1-10 .github/workflows/build.yml1-10