本页面介绍在构建 CPython 之前用于配置它的过程和工具。配置过程准备构建环境,检测系统功能,并生成编译 Python 所需的文件。它在类 Unix 系统和 Windows 之间存在显著差异。
有关配置后实际构建过程的信息,请参阅 构建系统。
CPython 中的配置过程服务于几个关键目的:
CPython 根据目标平台使用不同的配置方法
来源: configure.ac1-28 PCbuild/pythoncore.vcxproj1-31 Makefile.pre.in1-20
在类 Unix 系统(Linux、macOS 等)上,CPython 使用 GNU Autoconf 系统来生成一个配置脚本。
Unix 配置过程中涉及的关键文件是:
来源: configure.ac1-50 Makefile.pre.in1-15 pyconfig.h.in1-20
configure 脚本从命令行运行,并接受大量选项来自定义构建。
./configure [options]
运行后,它会生成多个文件,其中最重要的是:
来源: configure1-114 Doc/using/configure.rst100-107
configure 脚本支持许多自定义构建的选项。一些重要的类别包括:
| 类别 | 示例选项 | 目的 |
|---|---|---|
| 通用 | --enable-shared, --with-pydebug | 控制整体构建特性 |
| 模块选项 | --enable-loadable-sqlite-extensions | 启用/禁用特定模块 |
| 安装 | --prefix=/usr/local | 控制 Python 的安装位置 |
| 性能 | --enable-optimizations, --with-lto | 启用性能优化 |
| 扩展 | --with-openssl | 配置外部库依赖项 |
可以通过运行以下命令获取配置选项的完整列表:
./configure --help
来源: Doc/using/configure.rst99-524 configure.ac1084-1175
来源: configure593-642 configure.ac312-384
在 Windows 上,CPython 使用 Visual Studio 项目文件,而不是 autoconf 系统。
Windows 构建依赖于位于 PCbuild 目录中的 Visual Studio 项目文件 (.vcxproj)。
来源: PCbuild/pythoncore.vcxproj1-97 PCbuild/_freeze_module.vcxproj1-102
Visual Studio 项目支持多种配置和平台。
| 配置 | 目的 |
|---|---|
| 调试 | 带调试符号构建,不带优化 |
| 发布 | 用于生产的优化构建 |
| PGInstrument/PGUpdate | 概要文件引导的优化构建 |
| 平台 | 目的 |
|---|---|
| Win32 | 32 位 x86 构建 |
| x64 | 64 位 x86-64 构建 |
| ARM | 32 位 ARM 构建 |
| ARM64 | 64 位 ARM 构建 |
来源: PCbuild/pythoncore.vcxproj4-67 PCbuild/_freeze_module.vcxproj4-67
CPython 配置的一个关键方面是确定要构建哪些模块以及如何构建它们。
模块通过 Setup 文件进行配置。
来源: Modules/Setup1-41 Modules/Setup.bootstrap.in1-40
Setup 文件定义了三种类型的模块构建:
| 类型 | 标记 | 描述 |
|---|---|---|
| 静态 | *static* | 直接编译到 Python 二进制文件中 |
| 共享 | *shared* | 构建为独立的共享库(.so/.pyd) |
| 已禁用 | *disabled* | 根本不构建 |
来源: Modules/Setup13-21 Modules/Setup.bootstrap.in5-6
Setup 文件中的每一行都有以下结构:
<module> ... [<sourcefile> ...] [<cpparg> ...] [<library> ...]
其中
<module> 是模块名称<sourcefile> 是一个以 .c 结尾的源文件<cpparg> 是一个以 -I、-D、-U 或 -C 开头的预处理器标志<library> 是一个以 .a 结尾或以 -l 或 -L 开头的库配置过程会检测目标平台并据此调整构建。
来源: configure.ac312-384 configure366-384
CPython 支持交叉编译,即在一种系统上进行构建,但目标是另一种系统。为此提供了特殊选项。
./configure --build=<build-system> --host=<target-system> --with-build-python=<path>
来源: configure.ac137-176 Doc/using/configure.rst137-176
配置过程会生成几个重要的文件
pyconfig.h 文件包含 C 预处理器定义,用于平台特定的功能。它被 Python.h 包含,以定义适当的平台设置。
主要部分包括
来源: pyconfig.h.in1-100 configure.ac228-241
生成的 Makefile 包含
来源: Makefile.pre.in30-150 configure.ac98-111
CPython 的配置过程复杂且高度适应不同的平台和用户需求。它创建了一个特定于环境的构建系统,该系统处理每个平台的独特特征,同时在它们之间保持一致的 Python 体验。
来源: configure.ac Makefile.pre.in PCbuild/pythoncore.vcxproj Modules/Setup Doc/using/configure.rst