3.配置 Python¶
3.1.建置需求¶
要建置 CPython,你將需要:
一個C11 編譯器。選擇性 C11 功能並非必要。
在 Windows 上需要 Microsoft Visual Studio 2017 或更新版本。
支援IEEE 754 浮點數與浮點數非數值 (NaN)。
thread 的支援。
在 3.5 版的變更:在 Windows 上現在需要 Visual Studio 2015 或更新版本。
在 3.6 版的變更:Selected C99 features, like<stdint.h> andstaticinline functions,are now required.
在 3.7 版的變更:執行緒支援現在是必要的。
在 3.11 版的變更:現在需要 C11 編譯器、IEEE 754 和 NaN 支援。在 Windows 上需要 Visual Studio 2017 或更新版本。
See alsoPEP 7 "Style Guide for C Code" andPEP 11 "CPython platformsupport".
3.1.1.可選模組的需求¶
Someoptional modules of the standard libraryrequire third-party libraries installed for development(for example, header files must be available).
Missing requirements are reported in theconfigure output.Modules that are missing due to missing dependencies are listed near the endof themake output,sometimes using an internal name, for example,_ctypes forctypesmodule.
If you distribute a CPython interpreter without optional modules,it's best practice to advise users, who generally expect thatstandard library modules are available.
建置可選模組的依賴項目為:
Dependency | Minimum version | Python 模組 |
|---|---|---|
建議使用 3.3.0 版本 | ||
2.5.0 | ||
| ||
3.0.18 recommended (1.1.1 minimum) | ||
3.15.2 | ||
8.5.12 | ||
1.2.2.1 | ||
1.4.5 |
Iflibmpdec is not available, thedecimal module will usea pure-Python implementation.See--with-system-libmpdec for details.
See--with-readline for choosing the backend for thereadline module.
Theuuid module uses_uuid to generate "safe" UUIDs.See the module documentation for details.
Thecurses module requires thelibncurses orlibncurseswlibrary.Thecurses.panel module additionally requires thelibpanel orlibpanelw library.
If OpenSSL is not available, thehashlib module will usebundled implementations of several hash functions.See--with-builtin-hashlib-hashes forforcing usage of OpenSSL.
Note that the table does not include all optional modules; in particular,platform-specific modules likewinreg are not listed here.
也參考
Thedevguideincludes a full list of dependencies required to build all modules andinstructions on how to install them on common platforms.
--with-system-expatallows building with an externallibexpat library.
在 3.1 版的變更:tkinter 現在需要 Tcl/Tk version 8.3.1。
在 3.5 版的變更:tkinter 現在需要 Tcl/Tk version 8.4。
在 3.11 版的變更:tkinter 現在需要 Tcl/Tk version 8.5.12。
在 3.13 版的變更:sqlite3 現在會需要 SQLite 3.15.2。
3.2.產生的檔案¶
To reduce build dependencies, Python source code contains multiple generatedfiles. Commands to regenerate all generated files:
makeregen-allmakeregen-stdlib-module-namesmakeregen-limited-abimakeregen-configure
TheMakefile.pre.in file documents generated files, their inputs, and tools usedto regenerate them. Search forregen-* make targets.
3.2.1.設定腳本¶
Themakeregen-configure command regenerates theaclocal.m4 file andtheconfigure script using theTools/build/regen-configure.sh shellscript which uses an Ubuntu container to get the same tools versions and have areproducible output.
The container is optional, the following command can be run locally:
autoreconf-ivf-Werror
The generated files can change depending on the exact versions of thetools used.The container that CPython uses hasAutoconf 2.72,aclocal fromAutomake 1.16.5,andpkg-config 1.8.1.
在 3.13 版的變更:Autoconf 2.71 and aclocal 1.16.5 and are now used to regenerateconfigure.
在 3.14 版的變更:現在使用 Autoconf 2.72 來重新產生configure。
3.3.設定選項¶
使用以下命令列出所有configure 腳本選項:
./configure--help
請見 Python 原始碼發行版中的Misc/SpecialBuilds.txt。
3.3.1.一般選項¶
- --enable-loadable-sqlite-extensions¶
Support loadable extensions in the
_sqliteextension module (defaultis no) of thesqlite3module.請見
sqlite3模組的sqlite3.Connection.enable_load_extension()方法。在 3.6 版被加入.
- --enable-big-digits=[15|30]¶
Define the size in bits of Python
intdigits: 15 or 30 bits.By default, the digit size is 30.
將
PYLONG_BITS_IN_DIGIT定義為15或30。
- --with-suffix=SUFFIX¶
將 Python 執行檔的後綴設定為SUFFIX。
在 Windows 和 macOS 上預設的後綴是
.exe(python.exe執行檔)、在 Emscripten node 上為.js、在 Emscripten 瀏覽器為.html、在 WASI 上為.wasm,以及在其他平台為空字串(python執行檔)。在 3.11 版的變更:在 WASM 平台上預設的後綴是
.js、.html或.wasm中的一個。
- --with-tzpath=<listofabsolutepathsseparatedbypathsep>¶
Select the default time zone search path for
zoneinfo.TZPATH.See theCompile-time configuration of thezoneinfomodule.預設值:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo。請見
os.pathsep路徑分隔符號。在 3.9 版被加入.
- --without-decimal-contextvar¶
Build the
_decimalextension module using a thread-local context ratherthan a coroutine-local context (default), see thedecimalmodule.請見
decimal.HAVE_CONTEXTVAR與contextvars模組。在 3.9 版被加入.
- --with-dbmliborder=<listofbackendnames>¶
Override order to check db backends for the
dbmmoduleA valid value is a colon (
:) separated string with the backend names:ndbm;gdbm;bdb.
- --without-c-locale-coercion¶
Disable C locale coercion to a UTF-8 based locale (enabled by default).
不要定義
PY_COERCE_C_LOCALE巨集。
- --with-platlibdir=DIRNAME¶
Python 函式庫目錄名稱(預設為
lib)。Fedora 和 SuSE 在 64 位元平台上使用
lib64。在 3.9 版被加入.
- --with-wheel-pkg-dir=PATH¶
Directory of wheel packages used by the
ensurepipmodule(none by default).Some Linux distribution packaging policies recommend against bundlingdependencies. For example, Fedora installs wheel packages in the
/usr/share/python-wheels/directory and don't install theensurepip._bundledpackage.在 3.10 版被加入.
- --with-pkg-config=[check|yes|no]¶
Whether configure should usepkg-config to detect builddependencies.
check(預設):pkg-config 是可選的yes:pkg-config 是必要的no:即使存在也不使用pkg-config 來配置
在 3.11 版被加入.
- --enable-pystats¶
Turn on internal Python performance statistics gathering.
By default, statistics gathering is off. Use
python3-Xpystatscommandor setPYTHONSTATS=1environment variable to turn on statisticsgathering at Python startup.At Python exit, dump statistics if statistics gathering was on and notcleared.
效果:
新增
-Xpystats命令列選項。新增
PYTHONSTATS環境變數。定義
Py_STATS巨集。新增函式到
sys模組。sys._stats_on():啟用統計資料收集。sys._stats_off():關閉統計資料收集。sys._stats_clear():清除統計資料。sys._stats_dump():將統計資料轉儲到檔案,並清除統計資料。
統計資料將被轉儲到
/tmp/py_stats/(Unix) 或C:\temp\py_stats\(Windows) 中的任意(可能是唯一的)檔案。如果該目錄不存在,結果將被列印到 stderr。使用
Tools/scripts/summarize_stats.py來讀取統計資料。Statistics:
Opcode:
Specialization: success, failure, hit, deferred, miss, deopt, failures;
Execution count;
Pair count.
Call:
Inlined Python calls;
PyEval calls;
Frames pushed;
Frame object created;
Eval calls: vector, generator, legacy, function VECTORCALL, build class,slot, function "ex", API, method.
物件:
incref and decref;
interpreter incref and decref;
allocations: all, 512 bytes, 4 kiB, big;
free;
to/from free lists;
dictionary materialized/dematerialized;
type cache;
最佳化嘗試;
optimization traces created/executed;
uops executed.
垃圾回收器:
垃圾回收;
Objects visited;
Objects collected.
在 3.11 版被加入.
- --disable-gil¶
Enables support for running Python without theglobal interpreterlock (GIL): free threading build.
Defines the
Py_GIL_DISABLEDmacro and adds"t"tosys.abiflags.SeeFree-threaded CPython for more detail.
在 3.13 版被加入.
- --enable-experimental-jit=[no|yes|yes-off|interpreter]¶
Indicate how to integrate theexperimental just-in-time compiler.
no: Don't build the JIT.yes: Enable the JIT. To disable it at runtime, set the environmentvariablePYTHON_JIT=0.yes-off: Build the JIT, but disable it by default. To enable it atruntime, set the environment variablePYTHON_JIT=1.interpreter: Enable the "JIT interpreter" (only useful for thosedebugging the JIT itself). To disable it at runtime, set the environmentvariablePYTHON_JIT=0.
--enable-experimental-jit=nois the default behavior if the option is notprovided, and--enable-experimental-jitis shorthand for--enable-experimental-jit=yes. SeeTools/jit/README.mdfor moreinformation, including how to install the necessary build-time dependencies.備註
When building CPython with JIT enabled, ensure that your system has Python 3.11 or later installed.
在 3.13 版被加入.
- PKG_CONFIG¶
Path to
pkg-configutility.
- PKG_CONFIG_LIBDIR¶
- PKG_CONFIG_PATH¶
pkg-config選項。
3.3.2.C 編譯器選項。¶
- CC¶
C 編譯器指令。
- CFLAGS¶
C 編譯器旗標。
- CPP¶
C 預處理器指令。
- CPPFLAGS¶
C 預處理器旗標,例如:
-Iinclude_dir。
3.3.3.Linker options¶
- LDFLAGS¶
Linker flags, e.g.
-Llibrary_directory.
- LIBS¶
Libraries to pass to the linker, e.g.
-llibrary.
- MACHDEP¶
Name for machine-dependent library files.
3.3.4.Options for third-party dependencies¶
在 3.11 版被加入.
- BZIP2_CFLAGS¶
- BZIP2_LIBS¶
C compiler and linker flags to link Python to
libbz2, used bybz2module, overridingpkg-config.
- CURSES_CFLAGS¶
- CURSES_LIBS¶
C compiler and linker flags for
libncursesorlibncursesw, used bycursesmodule, overridingpkg-config.
- GDBM_CFLAGS¶
- GDBM_LIBS¶
C compiler and linker flags for
gdbm.
- LIBEDIT_CFLAGS¶
- LIBFFI_CFLAGS¶
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
C compiler and linker flags for
libmpdec, used bydecimalmodule,overridingpkg-config.備註
These environment variables have no effect unless
--with-system-libmpdecis specified.
- LIBLZMA_CFLAGS¶
- LIBREADLINE_CFLAGS¶
- LIBREADLINE_LIBS¶
C compiler and linker flags for
libreadline, used byreadlinemodule, overridingpkg-config.
- LIBSQLITE3_CFLAGS¶
- LIBSQLITE3_LIBS¶
C compiler and linker flags for
libsqlite3, used bysqlite3module, overridingpkg-config.
- LIBUUID_CFLAGS¶
- LIBZSTD_CFLAGS¶
- LIBZSTD_LIBS¶
C compiler and linker flags for
libzstd, used bycompression.zstdmodule,overridingpkg-config.在 3.14 版被加入.
- PANEL_CFLAGS¶
- PANEL_LIBS¶
C compiler and linker flags for PANEL, overriding
pkg-config.C compiler and linker flags for
libpanelorlibpanelw, used bycurses.panelmodule, overridingpkg-config.
- TCLTK_CFLAGS¶
- TCLTK_LIBS¶
C compiler and linker flags for TCLTK, overriding
pkg-config.
- ZLIB_CFLAGS¶
3.3.5.WebAssembly 選項¶
- --enable-wasm-dynamic-linking¶
Turn on dynamic linking support for WASM.
Dynamic linking enables
dlopen. File size of the executableincreases due to limited dead code elimination and additional features.在 3.11 版被加入.
- --enable-wasm-pthreads¶
Turn on pthreads support for WASM.
在 3.11 版被加入.
3.3.6.安裝選項¶
- --prefix=PREFIX¶
Install architecture-independent files in PREFIX. On Unix, itdefaults to
/usr/local.這個值可以在 runtime 使用
sys.prefix取得。As an example, one can use
--prefix="$HOME/.local/"to installa Python in its home directory.
- --exec-prefix=EPREFIX¶
Install architecture-dependent files in EPREFIX, defaults to
--prefix.這個值可以在 runtime 使用
sys.exec_prefix取得
3.3.7.效能選項¶
Configuring Python using--enable-optimizations--with-lto (PGO + LTO) isrecommended for best performance. The experimental--enable-bolt flag canalso be used to improve performance.
- --enable-optimizations¶
Enable Profile Guided Optimization (PGO) using
PROFILE_TASK(disabled by default).The C compiler Clang requires
llvm-profdataprogram for PGO. OnmacOS, GCC also requires it: GCC is just an alias to Clang on macOS.Disable also semantic interposition in libpython if
--enable-sharedandGCC is used: add-fno-semantic-interpositionto the compiler and linkerflags.備註
During the build, you may encounter compiler warnings aboutprofile data not being available for some source files.These warnings are harmless, as only a subset of the code is exercisedduring profile data acquisition.To disable these warnings on Clang, manually suppress them by adding
-Wno-profile-instr-unprofiledtoCFLAGS.在 3.6 版被加入.
在 3.10 版的變更:在 GCC 上使用
-fno-semantic-interposition。
- PROFILE_TASK¶
Environment variable used in the Makefile: Python command line arguments forthe PGO generation task.
預設值:
-mtest--pgo--timeout=$(TESTTIMEOUT)。在 3.8 版被加入.
在 3.13 版的變更:Task failure is no longer ignored silently.
- --with-lto=[full|thin|no|yes]¶
Enable Link Time Optimization (LTO) in any build (disabled by default).
The C compiler Clang requires
llvm-arfor LTO (aron macOS), as wellas an LTO-aware linker (ld.goldorlld).在 3.6 版被加入.
在 3.11 版被加入:To use ThinLTO feature, use
--with-lto=thinon Clang.在 3.12 版的變更:Use ThinLTO as the default optimization policy on Clang if the compiler accepts the flag.
- --enable-bolt¶
Enable usage of theBOLT post-link binary optimizer (disabled bydefault).
BOLT is part of the LLVM project but is not always included in their binarydistributions. This flag requires that
llvm-boltandmerge-fdataare available.BOLT is still a fairly new project so this flag should be consideredexperimental for now. Because this tool operates on machine code its successis dependent on a combination of the build environment + the otheroptimization configure args + the CPU architecture, and not all combinationsare supported.BOLT versions before LLVM 16 are known to crash BOLT under some scenarios.Use of LLVM 16 or newer for BOLT optimization is strongly encouraged.
The
BOLT_INSTRUMENT_FLAGSandBOLT_APPLY_FLAGSconfigure variables can be defined to override the default set ofarguments forllvm-bolt to instrument and apply BOLT data tobinaries, respectively.在 3.12 版被加入.
- BOLT_APPLY_FLAGS¶
Arguments to
llvm-boltwhen creating aBOLT optimized binary.在 3.12 版被加入.
- BOLT_INSTRUMENT_FLAGS¶
Arguments to
llvm-boltwhen instrumenting binaries.在 3.12 版被加入.
- --with-computed-gotos¶
Enable computed gotos in evaluation loop (enabled by default on supportedcompilers).
- --with-tail-call-interp¶
Enable interpreters using tail calls in CPython. If enabled, enabling PGO(
--enable-optimizations) is highly recommended. This option specificallyrequires a C compiler with proper tail call support, and thepreserve_nonecalling convention. For example, Clang 19 and newer supports this feature.在 3.14 版被加入.
- --without-mimalloc¶
Disable the fastmimalloc allocator(enabled by default).
另請參閱
PYTHONMALLOC環境變數。
- --without-pymalloc¶
Disable the specialized Python memory allocatorpymalloc(enabled by default).
另請參閱
PYTHONMALLOC環境變數。
- --without-doc-strings¶
Disable static documentation strings to reduce the memory footprint (enabledby default). Documentation strings defined in Python are not affected.
不要定義
WITH_DOC_STRINGS巨集。請見
PyDoc_STRVAR()巨集。
- --enable-profiling¶
Enable C-level code profiling with
gprof(disabled by default).
- --with-strict-overflow¶
Add
-fstrict-overflowto the C compiler flags (by default we add-fno-strict-overflowinstead).
- --without-remote-debug¶
Deactivate remote debugging support described inPEP 768 (enabled by default).When this flag is provided the code that allows the interpreter to schedule theexecution of a Python file in a separate process as described inPEP 768 isnot compiled. This includes both the functionality to schedule code to be executedand the functionality to receive code to be executed.
- Py_REMOTE_DEBUG¶
This macro is defined by default, unless Python is configured with
--without-remote-debug.Note that even if the macro is defined, remote debugging may not beavailable (for example, on an incompatible platform).
在 3.14 版被加入.
- Py_REMOTE_DEBUG¶
3.3.8.Python Debug Build¶
A debug build is Python built with the--with-pydebug configureoption.
Effects of a debug build:
Display all warnings by default: the list of default warning filters is emptyin the
warningsmodule.新增
d到sys.abiflags。新增
sys.gettotalrefcount()函式。新增
-Xshowrefcount命令列選項。Add
-dcommand line option andPYTHONDEBUGenvironmentvariable to debug the parser.Add support for the
__lltrace__variable: enable low-level tracing in thebytecode evaluation loop if the variable is defined.Installdebug hooks on memory allocatorsto detect buffer overflow and other memory errors.
定義
Py_DEBUG和Py_REF_DEBUG巨集。Add runtime checks: code surrounded by
#ifdefPy_DEBUGand#endif.Enableassert(...)and_PyObject_ASSERT(...)assertions: don't settheNDEBUGmacro (see also the--with-assertionsconfigureoption). Main runtime checks:Add sanity checks on the function arguments.
Unicode and int objects are created with their memory filled with a patternto detect usage of uninitialized objects.
Ensure that functions which can clear or replace the current exception arenot called with an exception raised.
Check that deallocator functions don't change the current exception.
The garbage collector (
gc.collect()function) runs some basic checkson objects consistency.The
Py_SAFE_DOWNCAST()macro checks for integer underflow andoverflow when downcasting from wide types to narrow types.
See also thePython Development Mode and the--with-trace-refs configure option.
在 3.8 版的變更:Release builds and debug builds are now ABI compatible: defining thePy_DEBUG macro no longer implies thePy_TRACE_REFS macro (see the--with-trace-refs option).
3.3.9.偵錯選項¶
- --with-pydebug¶
以偵錯模式建置 Python:定義
Py_DEBUG巨集(預設不啟用)。
- --with-trace-refs¶
以偵錯為目的啟用參照追蹤(預設不啟用)。
效果:
定義
Py_TRACE_REFS巨集。新增
sys.getobjects()函式。新增
PYTHONDUMPREFS環境變數。
PYTHONDUMPREFS環境變數可以用來在 Python 結束時轉儲仍然有效的物件和參照計數。不追蹤靜態配置的物件。
在 3.8 版被加入.
在 3.13 版的變更:這個建置現在與發佈版本建置和偵錯建置具有 ABI 相容性。
- --with-assertions¶
啟用 C 斷言建置(預設不啟用):
assert(...);和_PyObject_ASSERT(...);。如果設定,
NDEBUG巨集不會在OPT編譯器變數中定義。另請參閱
--with-pydebug選項(debug build),它也啟用了斷言。在 3.6 版被加入.
- --with-valgrind¶
啟用 Valgrind 支援(預設不啟用)。
- --with-dtrace¶
啟用 DTrace 支援(預設不啟用)。
請參閱使用 DTrace 和 SystemTap 檢測 CPython。
在 3.6 版被加入.
- --with-address-sanitizer¶
Enable AddressSanitizer memory error detector,
asan(default is no).To improve ASan detection capabilities you may also want to combine thiswith--without-pymallocto disable the specialized small-objectallocator whose allocations are not tracked by ASan.在 3.6 版被加入.
- --with-memory-sanitizer¶
啟用 MemorySanitizer 分配錯誤偵測器
msan(預設不啟用)。在 3.6 版被加入.
- --with-undefined-behavior-sanitizer¶
啟用 UndefinedBehaviorSanitizer 未定義行為偵測器
ubsan(預設不啟用)。在 3.6 版被加入.
- --with-thread-sanitizer¶
啟用 ThreadSanitizer 資料競爭偵測器
tsan(預設不啟用)。在 3.13 版被加入.
3.3.10.Linker options¶
- --enable-shared¶
啟用建置共享 Python 函式庫:
libpython(預設不啟用)。
- --without-static-libpython¶
不要建置
libpythonMAJOR.MINOR.a並且不要安裝python.o(預設會建置並啟用)。在 3.10 版被加入.
3.3.11.函式庫選項¶
- --with-libs='lib1...'¶
Link against additional libraries (default is no).
- --with-system-expat¶
使用已安裝的
expat函式庫建置pyexpat模組(預設不建置)。
- --with-system-libmpdec¶
使用已安裝的
mpdecimal函式庫建置_decimal擴充模組,請參閱decimal模組(預設建置)。在 3.3 版被加入.
在 3.13 版的變更:預設使用已安裝的
mpdecimal函式庫。在 3.15 版的變更:A bundled copy of the library will no longer be selectedimplicitly if an installed
mpdecimallibrary is not found.In Python 3.15 only, it can still be selected explicitly using--with-system-libmpdec=noor--without-system-libmpdec.Deprecated since version 3.13, will be removed in version 3.16:Python 3.16 不再隨附
mpdecimal函式庫的原始碼副本。
- --with-readline=readline|editline¶
Designate a backend library for the
readlinemodule.readline: Use readline as the backend.
editline: Use editline as the backend.
在 3.10 版被加入.
- --with-libm=STRING¶
Override
libmmath library toSTRING (default is system-dependent).
- --with-libc=STRING¶
Override
libcC library toSTRING (default is system-dependent).
- --with-openssl=DIR¶
OpenSSL 目錄的根目錄。
在 3.7 版被加入.
- --with-openssl-rpath=[no|auto|DIR]¶
Set runtime library directory (rpath) for OpenSSL libraries:
no(default): don't set rpath;auto: auto-detect rpath from--with-opensslandpkg-config;DIR: set an explicit rpath.
在 3.10 版被加入.
3.3.12.安全性選項¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
Select hash algorithm for use in
Python/pyhash.c:siphash13(預設);siphash24;fnv。
在 3.4 版被加入.
在 3.11 版被加入:
siphash13is added and it is the new default.
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
內建雜湊模組:
md5;sha1;sha256;sha512;sha3(with shake);blake2。
在 3.9 版被加入.
- --with-ssl-default-suites=[python|openssl|STRING]¶
Override the OpenSSL default cipher suites string:
python(default): use Python's preferred selection;openssl: leave OpenSSL's defaults untouched;STRING: use a custom string
請見
ssl模組。在 3.7 版被加入.
在 3.10 版的變更:The settings
pythonandSTRING also set TLS 1.2 as minimumprotocol version.
- --disable-safety¶
Disable compiler options that arerecommended by OpenSSF for security reasons with no performance overhead.If this option is not enabled, CPython will be built based on safety compiler options with no slow down.When this option is enabled, CPython will not be built with the compiler options listed below.
The following compiler options are disabled with
--disable-safety:-fstack-protector-strong: Enable run-time checks for stack-based buffer overflows.
-Wtrampolines: Enable warnings about trampolines that require executable stacks.
在 3.14 版被加入.
- --enable-slower-safety¶
Enable compiler options that arerecommended by OpenSSF for security reasons which require overhead.If this option is not enabled, CPython will not be built based on safety compiler options which performance impact.When this option is enabled, CPython will be built with the compiler options listed below.
The following compiler options are enabled with
--enable-slower-safety:-D_FORTIFY_SOURCE=3: Fortify sources with compile- and run-time checks for unsafe libc usage and buffer overflows.
在 3.14 版被加入.
3.3.13.macOS 選項¶
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
Create a universal binary build.SDKDIR specifies which macOS SDK shouldbe used to perform the build (default is no).
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
Create a Python.framework rather than a traditional Unix install. OptionalINSTALLDIR specifies the installation path (default is no).
- --with-universal-archs=ARCH¶
Specify the kind of universal binary that should be created. This option isonly valid when
--enable-universalsdkis set.選項:
universal2(x86-64 與 arm64);32-bit(PPC 與 i386);64-bit(PPC64 與 x86-64);3-way(i386、PPC 與 x86-64);intel(i386 與 x86-64);intel-32(i386);intel-64(x86-64);all(PPC、i386、PPC64 與 x86-64)。
Note that values for this configuration item arenot the same as theidentifiers used for universal binary wheels on macOS. See the PythonPackaging User Guide for details on thepackaging platform compatibilitytags used on macOS
- --with-framework-name=FRAMEWORK¶
Specify the name for the python framework on macOS only valid when
--enable-frameworkis set (default:Python).
- --with-app-store-compliance¶
- --with-app-store-compliance=PATCH-FILE¶
The Python standard library contains strings that are known to triggerautomated inspection tool errors when submitted for distribution bythe macOS and iOS App Stores. If enabled, this option will apply the list ofpatches that are known to correct app store compliance. A custom patchfile can also be specified. This option is disabled by default.
在 3.13 版被加入.
3.3.14.iOS 選項¶
- --enable-framework=INSTALLDIR¶
Create a Python.framework. Unlike macOS, theINSTALLDIR argumentspecifying the installation path is mandatory.
- --with-framework-name=FRAMEWORK¶
指定框架的名稱(預設值:
Python)。
3.3.15.Cross Compiling Options¶
Cross compiling, also known as cross building, can be used to build Pythonfor another CPU architecture or platform. Cross compiling requires a Pythoninterpreter for the build platform. The version of the build Python must matchthe version of the cross compiled host Python.
- --build=BUILD¶
configure for building on BUILD, usually guessed byconfig.guess.
- --host=HOST¶
cross-compile to build programs to run on HOST (target platform)
- --with-build-python=path/to/python¶
path to build
pythonbinary for cross compiling在 3.11 版被加入.
- CONFIG_SITE=file¶
An environment variable that points to a file with configure overrides.
範例config.site 檔案:
# config.site-aarch64ac_cv_buggy_getaddrinfo=noac_cv_file__dev_ptmx=yesac_cv_file__dev_ptc=no
- HOSTRUNNER¶
Program to run CPython for the host platform for cross-compilation.
在 3.11 版被加入.
Cross compiling example:
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: C extensions built by the Makefile usingModule/makesetupshell script;
3.4.2.主要建置步驟¶
C 檔案(
.c)被建置為目的檔(.o)。A static
libpythonlibrary (.a) is created from objects files.python.oand the staticlibpythonlibrary are linked into thefinalpythonprogram.C extensions are built by the Makefile (see
Modules/Setup).
3.4.3.主要 Makefile 目標¶
3.4.3.1.make¶
For the most part, when rebuilding after editing some code orrefreshing your checkout from upstream, all you need to do is executemake, which (per Make's semantics) builds the default target, thefirst one defined in the Makefile. By tradition (including in theCPython project) this is usually theall target. Theconfigure script expands anautoconf variable,@DEF_MAKE_ALL_RULE@ to describe precisely which targetsmakeall will build. The three choices are:
profile-opt(使用--enable-optimizations配置)build_wasm(chosen if the host platform matcheswasm32-wasi*orwasm32-emscripten)build_all(未明確使用其他選項進行配置)
Depending on the most recent source file changes, Make will rebuildany targets (object files and executables) deemed out-of-date,including runningconfigure again if necessary. Source/targetdependencies are many and maintained manually however, so Makesometimes doesn't have all the information necessary to correctlydetect all targets which need to be rebuilt. Depending on whichtargets aren't rebuilt, you might experience a number of problems. Ifyou have build or test problems which you can't otherwise explain,makeclean&&make should work around most dependency problems, atthe expense of longer build times.
3.4.3.2.make platform¶
Build thepython program, but don't build the standard libraryextension modules. This generates a file namedplatform whichcontains a single line describing the details of the build platform,e.g.,macosx-14.3-arm64-3.12 orlinux-x86_64-3.13.
3.4.3.3.make profile-opt¶
Build Python using profile-guided optimization (PGO). You can use theconfigure--enable-optimizations option to make this thedefault target of themake command (makeall or justmake).
3.4.3.4.make clean¶
移除建置的檔案。
3.4.3.5.make distclean¶
In addition to the work done bymakeclean, remove filescreated by the configure script.configure will have to be runbefore building again.[6]
3.4.3.6.make install¶
建置all 目標並安裝 Python。
3.4.3.7.make test¶
Build theall target and run the Python test suite with the--fast-ci option without GUI tests. Variables:
TESTOPTS:額外的 regrtest 命令列選項。TESTPYTHONOPTS:額外的 Python 命令列選項。TESTTIMEOUT:秒數表示的超時設定(預設值:10 分鐘)。
3.4.3.8.make ci¶
This is similar tomaketest, but uses the-ugui to also run GUI tests.
在 3.14 版被加入.
3.4.3.9.make buildbottest¶
This is similar tomaketest, but uses the--slow-cioption and default timeout of 20 minutes, instead of--fast-ci option.
3.4.3.10.make regen-all¶
Regenerate (almost) all generated files. These include (but are notlimited to) bytecode cases, and parser generator file.makeregen-stdlib-module-names andautoconf must be runseparately for the remaininggenerated files.
3.4.4.C 擴充模組¶
Some C extensions are built as built-in modules, like thesys module.They are built with thePy_BUILD_CORE_BUILTIN macro defined.Built-in modules have no__file__ attribute:
>>>importsys>>>sys<module 'sys' (built-in)>>>>sys.__file__Traceback (most recent call last): File"<stdin>", line1, in<module>AttributeError:module 'sys' has no attribute '__file__'
Other C extensions are built as dynamic libraries, like the_asyncio module.They are built with thePy_BUILD_CORE_MODULE macro defined.Example on 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 is used to generate Makefile targets to build C extensions.At the beginning of the files, C extensions are built as built-in modules.Extensions defined after the*shared* marker are built as dynamic libraries.
ThePyAPI_FUNC(),PyAPI_DATA() andPyMODINIT_FUNC macros ofInclude/exports.h are defineddifferently depending if thePy_BUILD_CORE_MODULE macro is defined:
如果定義了
Py_BUILD_CORE_MODULE,則使用Py_EXPORTED_SYMBOL否則使用
Py_IMPORTED_SYMBOL。
If thePy_BUILD_CORE_BUILTIN macro is used by mistake on a C extensionbuilt as a shared library, itsPyInit_xxx() function is not exported,causing anImportError on import.
3.5.Compiler and linker flags¶
Options set by the./configure script and environment variables and used byMakefile.
3.5.1.預處理器旗標¶
- CPPFLAGS¶
(Objective) C/C++ preprocessor flags, e.g.
-Iinclude_dirif you haveheaders in a nonstandard directoryinclude_dir.Both
CPPFLAGSandLDFLAGSneed to contain the shell'svalue to be able to build extension modules using thedirectories specified in the environment variables.
- BASECPPFLAGS¶
在 3.4 版被加入.
- PY_CPPFLAGS¶
Extra preprocessor flags added for building the interpreter object files.
Default:
$(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_NODISTis used for building the interpreter and stdlib Cextensions. Use it when a compiler flag shouldnot be part ofCFLAGSonce Python is installed (gh-65320).In particular,
CFLAGSshould not contain:the compiler flag
-I(for setting the search path for include files).The-Iflags are processed from left to right, and any flags inCFLAGSwould take precedence over user- and package-supplied-Iflags.hardening flags such as
-Werrorbecause distributions cannot controlwhether packages installed by users conform to such heightenedstandards.
在 3.5 版被加入.
- COMPILEALL_OPTS¶
Options passed to the
compileallcommand line when building PYC filesinmakeinstall. Default:-j0.在 3.12 版被加入.
- EXTRA_CFLAGS¶
額外的 C 編譯器旗標。
- CONFIGURE_CFLAGS_NODIST¶
Value of
CFLAGS_NODISTvariable passed to the./configurescript.在 3.5 版被加入.
- BASECFLAGS¶
基本編譯器旗標。
- OPT¶
最佳化旗標。
- CFLAGS_ALIASING¶
Strict or non-strict aliasing flags used to compile
Python/dtoa.c.在 3.7 版被加入.
- CCSHARED¶
用於建置共享函式庫的編譯器旗標。
例如說
-fPIC被使用於 Linux 與 BSD 上。
- CFLAGSFORSHARED¶
用於建置直譯器目的檔的額外 C 旗標。
預設值:當使用
--enable-shared時為$(CCSHARED),否則為空字串。
- 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¶
Compiler flags to build a standard library extension module as a built-inmodule, like the
posixmodule.預設值:
$(PY_STDMODULE_CFLAGS)-DPy_BUILD_CORE_BUILTIN。在 3.8 版被加入.
- PURIFY¶
Purify command. Purify is a memory debugger program.
預設值:空字串(未使用)。
3.5.3.Linker flags¶
- LINKCC¶
Linker command used to build programs like
pythonand_testembed.預設值:
$(PURIFY)$(CC)。
- CONFIGURE_LDFLAGS¶
Value of
LDFLAGSvariable passed to the./configurescript.Avoid assigning
CFLAGS,LDFLAGS, etc. so users can usethem on the command line to append to these values without stomping thepre-set values.在 3.2 版被加入.
- LDFLAGS_NODIST¶
LDFLAGS_NODISTis used in the same manner asCFLAGS_NODIST. Use it when a linker flag shouldnot be part ofLDFLAGSonce Python is installed (gh-65320).In particular,
LDFLAGSshould not contain:the compiler flag
-L(for setting the search path for libraries).The-Lflags are processed from left to right, and any flags inLDFLAGSwould take precedence over user- and package-supplied-Lflags.
- CONFIGURE_LDFLAGS_NODIST¶
Value of
LDFLAGS_NODISTvariable passed to the./configurescript.在 3.8 版被加入.
- LDFLAGS¶
Linker flags, e.g.
-Llib_dirif you have libraries in a nonstandarddirectorylib_dir.Both
CPPFLAGSandLDFLAGSneed to contain the shell'svalue to be able to build extension modules using thedirectories specified in the environment variables.
- LIBS¶
Linker flags to pass libraries to the linker when linking the Pythonexecutable.
範例:
-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¶
Linker flags used for building the interpreter object files.
在 3.8 版被加入.
註腳
[6]gitclean-fdx is an even more extreme way to "clean" yourcheckout. It removes all files not known to Git.When bug hunting usinggitbisect, this isrecommended between probesto guarantee a completely clean build.Use with care, as itwill delete all files not checked into Git, including yournew, uncommitted work.