3. 配置 Python¶
3.1. 构建要求¶
编译 CPython 所需的特性:
- C11 编译器。 可选的 C11 特性 不是必须的。 
- 对 IEEE 754 浮点数和 浮点 Not-a-Number (NaN) 的支持。 
- 对线程的支持。 
- 在 Windows 上,需要 Microsoft Visual Studio 2017 或更新版本。 
在 3.11 版本发生变更: C11 编译器,现在要求 IEEE 754 和 NaN 支持。 在 Windows 上,需要 Visual Studio 2017 或更新版本。
在 3.10 版本发生变更: 现在要求 OpenSSL 1.1.1。
在 3.7 版本发生变更: 现在要求线程支持和 OpenSSL 1.0.2。
在 3.6 版本发生变更: 现在要求选定的 C99 特性,如 <stdint.h> 和 static inline 函数。
在 3.5 版本发生变更: 在 Windows 上,需要 Visual Studio 2015 或更新版本。
另请参阅 PEP 7 "Style Guide for C Code" 和 PEP 11 "CPython platform support"。
3.2. 已生成的文件¶
为了减少构建依赖性,Python 源代码包含多个已生成的文件。 重新生成所有已生成文件的命令如下:
make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure
Makefile.pre.in 文件记录了已生成的文件、它们的输入以及用于重新生成它们的工具。 搜索 regen-* make target。
3.2.1. 配置脚本¶
make regen-configure 命令将使用 Tools/build/regen-configure.sh shell 脚本生成 aclocal.m4 文件和 configure 脚本,它通过使用一个 Ubuntu 容器来获取同样的工具版本并具有可复现的输出。
容器是可选的,以下命令可以在本地运行:
autoreconf -ivf -Werror
生成的文件可根据实际的 autoconf-archive, aclocal 和 pkg-config 版本进行改变。
3.3. 配置选项¶
用以下方式列出 ./configure 脚本的所有选项:
./configure --help
参阅 Python 源代码中的 Misc/SpecialBuilds.txt 。
3.3.1. 通用选项¶
- --enable-loadable-sqlite-extensions¶
- 在 - sqlite3模块的- _sqlite扩展模块中是否支持可加载扩展(默认为否)。- 参见 - sqlite3.Connection.enable_load_extension()方法的- sqlite3模块。- 在 3.6 版本加入. 
- --enable-big-digits=[15|30]¶
- 定义 Python - int数字的比特大小:15或30比特- 在默认情况下,数位大小为 30。 - 定义 - PYLONG_BITS_IN_DIGIT为- 15或- 30。
- --with-suffix=SUFFIX¶
- 将 Python 的可执行文件后缀设置为 SUFFIX。 - 在 Windows 和 macOS 上默认后缀为 - .exe(可执行文件为- python.exe),在 Emscripten 节点上为- .js,在 Emscripten 浏览器上为- .html,在 WASI 上为- .wasm,而在其他平台上为一个空字符串 (可执行文件为- python)。- 在 3.11 版本发生变更: 在 WASM 平台上默认后缀为 - .js,- .html或- .wasm之一。
- --with-tzpath=<list of absolute paths separated by pathsep>¶
- Select the default time zone search path for为 - zoneinfo.TZPATH选择默认的时区搜索路径。 参见- zoneinfo模块的 编译时配置。- 默认: - /usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo- 参阅 - os.pathsep路径分隔符。- 在 3.9 版本加入. 
- --without-decimal-contextvar¶
- 编译 - _decimal扩展模块时使用线程本地上下文,而不是协程本地上下文(默认),参见- decimal模块。- 参见 - decimal.HAVE_CONTEXTVAR和- contextvars模块。- 在 3.9 版本加入. 
- --with-dbmliborder=<list of backend names>¶
- 覆盖 - dbm模块的 db 后端检查顺序。- 合法值是用冒号( - :)分隔的字符串,包含后端名称。- ndbm;
- gdbm;
- bdb。
 
- --without-c-locale-coercion¶
- 禁用 C 语言对 UTF-8 的强制要求(默认为启用)。 - 不定义 - PY_COERCE_C_LOCALE宏。- 参阅 - PYTHONCOERCECLOCALE和 PEP 538。
- --without-freelists¶
- 禁用除空元组单例以外的所有自由列表。Disable all freelists except the empty tuple singleton. - 在 3.11 版本加入. 
- --with-platlibdir=DIRNAME¶
- Python 库目录名(默认为 - lib)。- Fedora 和 SuSE 在64 位平台用 - lib64。- 参阅 - sys.platlibdir。- 在 3.9 版本加入. 
- --with-wheel-pkg-dir=PATH¶
- ensurepip模块用到的 wheel 包目录(默认为无)。- 某些 Linux 发行版的打包策略建议不要捆绑依赖关系。如 Fedora 在 - /usr/share/python-wheels/目录下安装 wheel 包,而不安装- ensurepip._bundled包。- 在 3.10 版本加入. 
- --with-pkg-config=[check|yes|no]¶
- 配置是否应当使用 pkg-config 来检测构建依赖。 - check(默认值): pkg-config 为可选项
- yes: pkg-config 为必选项。
- no: 配置不使用 pkg-config 即使其存在
 - 在 3.11 版本加入. 
- --enable-pystats¶
- 启用内部统计数据收集。 - 统计信息将被转储至 - /tmp/py_stats/中的任意文件(可能唯一),或者在 Windows 上则为- C:\temp\py_stats\。 如果该目录不存在,结果将被打印到 stdout。- 使用 - Tools/scripts/summarize_stats.py来读取统计数据。- 在 3.11 版本加入. 
3.3.2. WebAssembly 选项。¶
- --with-emscripten-target=[browser|node]¶
- 为 - wasm32-emscripten设置生成风格。- browser(默认值): 预加载最小 stdlib,默认 MEMFS。
- node: NODERAWFS 和 pthread 支持。
 - 在 3.11 版本加入. 
- --enable-wasm-dynamic-linking¶
- 为 WASM 启用动态链接支持。 - 动态链接启用 - dlopen。 可执行文件的大小将由于限制死代码清理和附加特性而增加。- 在 3.11 版本加入. 
- --enable-wasm-pthreads¶
- 为 WASM 启用 pthreads 支持。 - 在 3.11 版本加入. 
3.3.3. 安装时的选项¶
- --prefix=PREFIX¶
- 在 PREFIX 中安装架构无关的文件。 在 Unix 上,它默认为 - /usr/local。- 该值可在运行时使用 - sys.prefix获取。- 作为示例,用户可以使用 - --prefix="$HOME/.local/"在其家目录中安装 Python。
- --exec-prefix=EPREFIX¶
- 在 EPREFIX 中安装架构无关的文件,默认为 - --prefix。- 该值可在运行时使用 - sys.exec_prefix获取。
3.3.4. 性能选项¶
为获得最佳性能推荐使用 --enable-optimizations --with-lto (PGO + LTO) 来配置 Python。 试验性的 --enable-bolt 旗标也可被用来提升性能。
- --enable-optimizations¶
- 用 - PROFILE_TASK启用以配置文件主导的优化(PGO)(默认为禁用)。- C 编译器 Clang 需要用到 - llvm-profdata程序进行 PGO。在 macOS 上,GCC 也需要用到它:在 macOS 上 GCC 只是 Clang 的别名而已。- 如果使用 - --enable-shared和 GCC ,还可以禁用 libpython 中的语义插值:在编译器和链接器的标志中加入- -fno-semantic-interposition。- 在 3.6 版本加入. - 在 3.10 版本发生变更: 在 GCC 上使用 - -fno-semantic-interposition。
- PROFILE_TASK¶
- Makefile 用到的环境变量:PGO 用到的 Python 命令行参数。 - 默认为: - -m test --pgo --timeout=$(TESTTIMEOUT)。- 在 3.8 版本加入. 
- --with-lto=[full|thin|no|yes]¶
- 在编译过程中启用链接时间优化(LTO)(默认为禁用)。 - LTO 时 C 编译器 Clang 需要用到 - llvm-ar参数(在 macOS 则为- ar),以及支持 LTO 的链接器(- ld.gold或- lld)。- 在 3.6 版本加入. - 在 3.11 版本加入: 要使用 ThinLTO 特性,请在 Clang 上使用 - --with-lto=thin。- 在 3.12 版本发生变更: 如果编译器支持将使用 ThinLTO 旗标作为 Clang 上的默认优化策略。 
- --enable-bolt¶
- 允许启用 BOLT 链接后二进制优化器 (默认为禁用)。 - BOLT 是 LLVM 项目的一部分但并不总是包括在其二进制分发包中。 该旗标要求 - llvm-bolt和- merge-fdata可用。- BOLT 仍然是一个相当新的项目因此目前该旗标应当被视为是试验性的。 因为此工具是作用于机器码所以其成功依赖于构建环境 + 其他优化配置参数 + CPU 架构的组合,并且并非所有组合都受到支持。 已知 LLVM 16 之前的 BOLT 版本在某些场景下会使得 BOLT 发生崩溃。 强烈建议使用 LLVM 16 或更新版本进行 BOLT 优化。 - BOLT_INSTRUMENT_FLAGS和- BOLT_APPLY_FLAGSconfigure 变量可被定义为覆盖 llvm-bolt 的默认参数集合来分别指示和将 BOLT 数据应用于二进制代码中。- 在 3.12 版本加入. 
- --with-computed-gotos¶
- 在求值环节启用 goto 计数(在支持的编译器上默认启用)。 
- --without-pymalloc¶
- 禁用特定的 Python 内存分配器 pymalloc (默认为启用)。 - 参见环境变量 - PYTHONMALLOC。
- --without-doc-strings¶
- 禁用静态文档字符串以减少内存占用(默认启用)。Python 中定义的文档字符串不受影响。 - 不定义 - PY_COERCE_C_LOCALE宏。- 参阅宏 - PyDoc_STRVAR()。
- --enable-profiling¶
- 用 - gprof启用 C 语言级的代码评估(默认为禁用)。
- --with-strict-overflow¶
- 将 - -fstrict-overflow添加到 C 编译器旗标 (在默认情况下我们将添加- -fno-strict-overflow来代替)。
3.3.5. Python 调试级编译¶
调试版本 Python 是指带有 --with-pydebug  参数的编译。
调试版本的效果:
- 默认显示所有警告:在 - warnings模块中,默认警告过滤器的列表是空的。
- 在 - sys.abiflags中加入- d标记。
- 加入 - sys.gettotalrefcount()函数。
- 命令行参数加入 - -X showrefcount。
- 添加 - -d命令行选项和- PYTHONDEBUG环境变量用于调试解析器。
- 添加对 - __lltrace__变量的支持:如果定义了该变量则会在字节码求值循环中启用低层级追踪。
- 安装 内存分配调试钩子 ,以便检测缓冲区溢出和其他内存错误。 
- 定义宏 - Py_DEBUG和- Py_REF_DEBUG。
- 增加运行时检查:针对由 - #ifdef Py_DEBUG和- #endif所包裹的代码。 启用- assert(...)和- _PyObject_ASSERT(...)断言:不设置- NDEBUG宏(另请参阅- --with-assertions配置选项)。 主要的运行时检查有:- 增加了对函数参数的合理性检查。 
- 创建 Unicode 和 int 对象时,内存按某种模式进行了填充,用于检测是否使用了未初始化的对象。 
- 确保有能力清除或替换当前异常的函数在调用时不会引发异常。 
- 检查内存释放器函数是否不改变当前异常。 
- 垃圾收集器( - gc.collect()函数)对对象的一致性进行一些基本检查。
- 从较宽类型转换到较窄类型时, - Py_SAFE_DOWNCAST()宏会检查整数下溢和上溢的情况。
 
参见  Python 开发模式 和配置参数 --with-trace-refs 。
在 3.8 版本发生变更: 发布版和调试版的编译现在是 ABI 兼容的:定义了 Py_DEBUG 宏不再意味着同时定义了 Py_TRACE_REFS 宏(参见 --with-trace-refs 参数),这引入了唯一一处不是 ABI 兼容的地方。
3.3.6. 调试选项¶
- --with-pydebug¶
- 在调试模式下编译 Python: 定义宏 - Py_DEBUG(默认为禁用)。
- --with-trace-refs¶
- 为了调试而启用引用的跟踪(默认为禁用)。 - 效果如下: - 定义 - Py_TRACE_REFS宏。
- 加入 - sys.getobjects()函数。
- 环境变量加入 - PYTHONDUMPREFS。
 - 此版本与发布模式(默认编译模式)或调试模式( - Py_DEBUG和- Py_REF_DEBUG宏)不具备 ABI 兼容性。- 在 3.8 版本加入. 
- --with-assertions¶
- 编译时启用 C 断言: - assert(...);和- _PyObject_ASSERT(...);(默认不启用)。- 如果设置此参数,则在 - OPT编译器变量中不定义- NDEBUG宏。- 参阅 - --with-pydebug选项(调试编译模式),它也可以启用断言。- 在 3.6 版本加入. 
- --with-valgrind¶
- 启用 Valgrind (默认禁用)。 
- --with-dtrace¶
- 启用 DTrace(默认禁用)。 - 参阅 用 DTrace 和 SystemTap 测试 CPython。 - 在 3.6 版本加入. 
- --with-address-sanitizer¶
- 启用 AddressSanitizer 内存错误检测 - asan,(默认为禁用)。- 在 3.6 版本加入. 
- --with-memory-sanitizer¶
- 启用 MemorySanitizer 内存错误检测 - msan,(默认为禁用)。- 在 3.6 版本加入. 
- --with-undefined-behavior-sanitizer¶
- 启用 undefinedBehaviorSanitizer 未定义行为检测 - ubsan,(默认为禁用)。- 在 3.6 版本加入. 
3.3.7. 链接器选项¶
- 启用共享 Python 库 - libpython的编译(默认为禁用)。
- --without-static-libpython¶
- 不编译 - libpythonMAJOR.MINOR.a,也不安装- python.o(默认会编译并安装)。- 在 3.10 版本加入. 
3.3.8. 库选项¶
- --with-libs='lib1 ...'¶
- 链接附加库(默认不会)。 
- --with-system-expat¶
- 用已安装的 - expat库编译- pyexpat模块(默认为否)。
- --with-libm=STRING¶
- 将 - libm数学库覆盖为 STRING (默认情况视系统而定)。
- --with-libc=STRING¶
- 将 - libcC 库覆盖为 STRING (默认情况视系统而定)。
- --with-openssl=DIR¶
- OpenSSL 的根目录。 - 在 3.7 版本加入. 
- --with-openssl-rpath=[no|auto|DIR]¶
- 设置 OpenSSL 库的运行时库目录(rpath)。 - no(默认): 不设置 rpath。
- auto:根据- --with-openssl和- pkg-config自动检测 rpath。
- DIR :直接设置 rpath。 
 - 在 3.10 版本加入. 
3.3.9. 安全性选项¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
- 选择 - Python/pyhash.c采用的哈希算法。- siphash13(默认值);
- siphash24;
- fnv.
 - 在 3.4 版本加入. - 在 3.11 版本加入: 增加了 - siphash13并且是新的默认值。
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
- 内置哈希模块: - md5。
- sha1。
- sha256。
- sha512。
- sha3(带 shake)。
- blake2。
 - 在 3.9 版本加入. 
3.3.10. macOS 选项¶
参见 Mac/README.rst 。
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
- 创建通用的二进制版本。SDKDIR 指定应采用的 macOS SDK (默认为否)。 
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
- 创建 Python.framework ,而不是传统的 Unix 安装版。可选参数 INSTALLDIR 指定了安装路径((默认为否)。 
- --with-universal-archs=ARCH¶
- 指定应创建何种通用二进制文件。该选项仅当设置了 - --enable-universalsdk时才有效。- 可选项: - universal2。
- 32-bit。
- 64-bit。
- 3-way。
- intel。
- intel-32。
- intel-64。
- all。
 
- --with-framework-name=FRAMEWORK¶
- 为 macOS 中的 python 框架指定名称,仅当设置了 - --enable-framework时有效(默认:- Python)。
3.3.11. 交叉编译选项¶
交叉编译,或称交叉构建,可被用于为不同的 CPU 架构或平台构建 Python。 交叉编译需要一个针对构建平台的 Python 解释器。 构建的 Python 版本必须与交叉编译的主机 Python 版本相匹配。
- --build=BUILD¶
- 用于在 BUILD 上执行构建的配置,通常由 config.guess 通过推测得到。 
- --host=HOST¶
- 交叉编译以构建在 HOST (目标平台) 上运行的程序 
- --with-build-python=path/to/python¶
- 针对交叉编译构建 - python二进制文件的路径- 在 3.11 版本加入. 
- CONFIG_SITE=file¶
- 指向一个带有配置重载的的文件的环境变量。 - 示例 config.site 文件: - # config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no 
交叉编译示例:
CONFIG_SITE=config.site-aarch64 ../configure \
    --build=x86_64-pc-linux-gnu \
    --host=aarch64-unknown-linux-gnu \
    --with-build-python=../x86_64/python
3.4. Python 构建系统¶
3.4.1. 构建系统的主要文件¶
- configure.ac=>- configure;
- Makefile.pre.in=>- Makefile(由- configure创建);
- pyconfig.h(由- configure创建);
- Modules/Setup: 由Makefile 使用- Module/makesetupshell 脚本构建的 C 扩展;
3.4.2. 主要构建步骤¶
- C文件( - .c)是作为对象文件(- .o)构建的。
- 一个静态库 - libpython(- .a)是由对象文件创建的。
- python.o和静态库- libpython被链接到最终程序- python中。
- C 扩展是由 Makefile 构建的 (参见 - Modules/Setup)。
3.4.3. 主要 Makefile 目标¶
- make:用标准库构建Python。
- make platform::构建- python程序,但不构建标准库扩展模块。
- make profile-opt:使用 Profile Guided Optimization (PGO) 构建 Python 。你可以使用 configure 的- --enable-optimizations选项来使其成为- make命令的默认目标(- make all或只是- make)。
- make buildbottest:构建 Python 并运行 Python 测试套件,与 buildbots 测试 Python 的方式相同。设置变量- TESTTIMEOUT(单位:秒)来改变测试超时时间(默认为 1200 即 20 分钟)。
- make install:构建并安装 Python 。
- make regen-all:重新生成(几乎)所有生成的文件;- make regen-stdlib-module-names和- autoconf必须对其余生成的文件单独运行。
- make clean:移除构建的文件。
- make distclean:与- make clean相同,但也删除由配置脚本创建的文件。
3.4.4. C 扩展¶
一些 C 扩展是作为内置模块构建的,比如模块 sys 。它们是在定义了宏 Py_BUILD_CORE_BUILTIN 的情况下构建的。内置模块没有 __file__ 属性:
>>> import sys
>>> sys
<module 'sys' (built-in)>
>>> sys.__file__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'sys' has no attribute '__file__'
其他 C 扩展是作为动态库来构建的,如 _asyncio 模块。 它们将在定义了 Py_BUILD_CORE_MODULE 宏的情况下构建。 在 Linux x86-64 上的例子:
>>> import _asyncio
>>> _asyncio
<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
>>> _asyncio.__file__
'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
Modules/Setup 用于生成 Makefile 目标,以构建 C 扩展。在文件的开头, C 被构建为内置模块。在标记 *shared* 之后定义的扩展被构建为动态库。
宏 PyAPI_FUNC(), PyAPI_DATA() 和 PyMODINIT_FUNC 在 Include/exports.h 中的定义将因是否定义了 Py_BUILD_CORE_MODULE 宏而不同:
- 如果 - Py_BUILD_CORE_MODULE定义了,使用- Py_EXPORTED_SYMBOL。
- 否则使用 - Py_IMPORTED_SYMBOL。
如果宏 Py_BUILD_CORE_BUILTIN 被错误地用在作为共享库构建的 C 扩展上,它的 PyInit_xxx() 函数就不会被导出,导致导入时出现 ImportError 。
3.5. 编译器和链接器的标志¶
脚本 ./configure 和环境变量设置的选项,并被 Makefile 使用。
3.5.1. 预处理器的标志¶
- CPPFLAGS¶
- (Objective) C/C++ 预处理器标志,例如,如果头文件位于非标准的目录 include_dir 中,请使用 - -Iinclude_dir。
- BASECPPFLAGS¶
- 在 3.4 版本加入. 
- PY_CPPFLAGS¶
- 为构建解释器对象文件增加了额外的预处理器标志。 - 默认为: - $(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)。- 在 3.2 版本加入. 
3.5.2. 编译器标志¶
- CC¶
- C 编译器指令。 - 例如: - gcc -pthread。
- CXX¶
- C++ 编译器指令。 - 例如: - g++ -pthread。
- CFLAGS¶
- C 编译器标志。 
- CFLAGS_NODIST¶
- CFLAGS_NODIST用于构建解释器和 stdlib C 扩展。 一旦装好 Python 则当某个编译器旗标 不应 成为- CFLAGS的一部分时将可使用它 (gh-65320)。- 特别地, - CFLAGS不应当包含:- 编译器旗标 - -I(用于为包括文件设置搜索路径)。- -I旗标将按从左到右的顺序处理,并且- CFLAGS中的任何旗标都将优先于 user- 和 package- 层级所提供的- -I旗标。
- 加固旗标如 - -Werror因为分发版无法控制由用户安装的包是否符合这样的高标准。
 - 在 3.5 版本加入. 
- COMPILEALL_OPTS¶
- 当在 - make install中构建 PYC 文件时传给- compileall命令行的选项。 默认值:- -j0。- 在 3.12 版本加入. 
- EXTRA_CFLAGS¶
- 而外的 C 编译器指令。 
- CONFIGURE_CFLAGS_NODIST¶
- 变量 - CFLAGS_NODIST的值传递给- ./configure脚本。- 在 3.5 版本加入. 
- BASECFLAGS¶
- 基础编译器标志。 
- OPT¶
- 优化标志。 
- CFLAGS_ALIASING¶
- 严格或不严格的别名标志,用于编译 - Python/dtoa.c、- 在 3.7 版本加入. 
- CCSHARED¶
- 用于构建共享库的编译器标志。 - 例如, - -fPIC在 Linux 和 BSD 上使用。
- CFLAGSFORSHARED¶
- 为构建解释器对象文件增加了额外的 C 标志。 - ,默认为: - $(CCSHARED),当- --enable-shared被使用时,则为空字符串
- PY_CFLAGS¶
- 默认为: - $(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)。
- PY_CFLAGS_NODIST¶
- 默认为: - $(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal。- 在 3.5 版本加入. 
- PY_STDMODULE_CFLAGS¶
- 用于构建解释器对象文件的 C 标志。 - 默认为: - $(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED)。- 在 3.7 版本加入. 
- PY_CORE_CFLAGS¶
- 默认为 - $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE。- 在 3.2 版本加入. 
- PY_BUILTIN_MODULE_CFLAGS¶
- 编译器标志,将标准库的扩展模块作为内置模块来构建,如 - posix模块- 默认为: - $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN。- 在 3.8 版本加入. 
- PURIFY¶
- Purify 命令。 Purify 是一个内存调试程序。 - 默认为:空字符串(不使用)。 
3.5.3. 链接器标志位¶
- LINKCC¶
- 用于构建如 - python和- _testembed的程序的链接器命令。- 默认值: - $(PURIFY) $(CC)。
- CONFIGURE_LDFLAGS¶
- 变量 - LDFLAGS的值被传递给- ./configure脚本。- 避免指定 - CFLAGS,- LDFLAGS等,这样用户就可以在命令行上使用它们来追加这些值,而不用触碰到预设的值。- 在 3.2 版本加入. 
- LDFLAGS_NODIST¶
- LDFLAGS_NODIST的使用方式与- CFLAGS_NODIST相同。 一旦装好 Python 则当某个链接器旗标 不应 成为- LDFLAGS的一部分时将可使用它 (gh-65320)。- 特别地, - LDFLAGS不应当包含:- 编译器旗标 - -L(用于为库设置搜索路径)。- -L旗标将按从左到右的顺序处理,并且- LDFLAGS中的任何旗标都将优先于 user- 和 package 层级所提供的- -L旗标。
 
- CONFIGURE_LDFLAGS_NODIST¶
- 变量 - LDFLAGS_NODIST的值传递给- ./configure脚本。- 在 3.8 版本加入. 
- LDFLAGS¶
- 链接器标志,例如,如果库位于非标准的目录 lib_dir 中,请使用 - -Llib_dir。
- LIBS¶
- 链接器标志,在链接 Python 可执行文件时将库传递给链接器。 - 例如: - -lrt。
- LDSHARED¶
- 构建一个共享库的命令。 - 默认为: - @LDSHARED@ $(PY_LDFLAGS)。
- BLDSHARED¶
- 构建共享库 - libpython的命令。- 默认为: - @BLDSHARED@ $(PY_CORE_LDFLAGS)。
- PY_LDFLAGS¶
- 默认为: - $(CONFIGURE_LDFLAGS) $(LDFLAGS)。
- PY_LDFLAGS_NODIST¶
- 默认为: - $(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)。- 在 3.8 版本加入. 
- PY_CORE_LDFLAGS¶
- 用于构建解释器对象文件的链接器标志。 - 在 3.8 版本加入.