3. Python konfigurieren¶
3.1. Voraussetzungen für den Build¶
Features and minimum versions required to build CPython:
Einen C11-Compiler. Optionale C11-Funktionen werden nicht benötigt.
Unter Windows wird Microsoft Visual Studio 2017 oder neuer benötigt.
Unterstützung für Gleitkommazahlen nach IEEE 754 sowie für Not-a-Number (NaN) bei Gleitkommazahlen.
Unterstützung für Threads.
OpenSSL 1.1.1 is the minimum possible version to build the
sslandhashlibextension modules against, but the series is end-of-life and no longer receives public security fixes. Use the latest patch release of a currently supported LTS release series (see the OpenSSL Roadmap), or the package provided by your operating system if available. Other libraries that offer an API compatible with OpenSSL 1.1.1 or later may work, but are not officially supported.SQLite 3.15.2 for the
sqlite3extension module.Tcl/Tk 8.5.12 for the
tkintermodule.Autoconf 2.71 and aclocal 1.16.5 are required to regenerate the
configurescript.
Geändert in Version 3.1: Tcl/Tk version 8.3.1 is now required.
Geändert in Version 3.5: On Windows, Visual Studio 2015 or later is now required. Tcl/Tk version 8.4 is now required.
Geändert in Version 3.6: Selected C99 features are now required, like <stdint.h> and static
inline functions.
Geändert in Version 3.7: Thread support and OpenSSL 1.0.2 are now required.
Geändert in Version 3.10: OpenSSL 1.1.1 is now required. Require SQLite 3.7.15.
Geändert in Version 3.11: C11 compiler, IEEE 754 and NaN support are now required.
On Windows, Visual Studio 2017 or later is required.
Tcl/Tk version 8.5.12 is now required for the tkinter module.
Geändert in Version 3.13: Autoconf 2.71, aclocal 1.16.5 and SQLite 3.15.2 are now required.
Siehe auch PEP 7 „Style Guide for C Code“ und PEP 11 „CPython platform support“.
3.2. Erzeugte Dateien¶
Um die Abhängigkeiten beim Bauen zu verringern, enthält der Python-Quellcode mehrere erzeugte Dateien. Befehle, um alle erzeugten Dateien neu zu erzeugen:
make regen-all
make regen-stdlib-module-names
make regen-limited-abi
make regen-configure
Die Datei Makefile.pre.in dokumentiert die erzeugten Dateien, ihre Eingaben und die Werkzeuge, mit denen sie neu erzeugt werden. Suche dort nach den make-Zielen regen-*.
3.2.1. Das Skript configure¶
Der Befehl make regen-configure erzeugt die Datei aclocal.m4 und das Skript configure neu. Dazu verwendet er das Shell-Skript Tools/build/regen-configure.sh, das einen Ubuntu-Container nutzt, um dieselben Werkzeugversionen zu erhalten und eine reproduzierbare Ausgabe zu bekommen.
Der Container ist nicht zwingend, der folgende Befehl lässt sich auch lokal ausführen:
autoreconf -ivf -Werror
The generated files can change depending on the exact autoconf-archive,
aclocal and pkg-config versions.
3.3. Optionen von configure¶
Alle Optionen des Skripts configure listest du so auf:
./configure --help
Siehe auch Misc/SpecialBuilds.txt in der Python-Quelldistribution.
3.3.1. Allgemeine Optionen¶
- --enable-loadable-sqlite-extensions¶
Unterstützt ladbare Erweiterungen im Erweiterungsmodul
_sqlitedes Modulssqlite3(Vorgabe ist nein).Siehe die Methode
sqlite3.Connection.enable_load_extension()des Modulssqlite3.Added in version 3.6.
- --disable-ipv6¶
Schaltet die Unterstützung für IPv6 ab (standardmäßig eingeschaltet, sofern unterstützt), siehe das Modul
socket.
- --enable-big-digits=[15|30]¶
Legt die Größe der Ziffern von Python-
intin Bit fest: 15 oder 30 Bit.Standardmäßig beträgt die Zifferngröße 30.
Setzt
PYLONG_BITS_IN_DIGITauf15oder30.Siehe
sys.int_info.bits_per_digit.
- --with-suffix=SUFFIX¶
Setzt das Suffix der ausführbaren Python-Datei auf SUFFIX.
Das Standardsuffix ist
.exeunter Windows und macOS (ausführbare Dateipython.exe),.jsbei Emscripten node,.htmlbei Emscripten browser,.wasmbei WASI und eine leere Zeichenkette auf den übrigen Plattformen (ausführbare Dateipython).Geändert in Version 3.11: Das Standardsuffix auf der WASM-Plattform ist eines von
.js,.htmloder.wasm.
- --with-tzpath=<list of absolute paths separated by pathsep>¶
Wählt den Standard-Suchpfad für Zeitzonen für
zoneinfo.TZPATH. Siehe die Konfiguration zur Übersetzungszeit des Modulszoneinfo.Vorgabe:
/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo.Siehe den Pfadtrenner
os.pathsep.Added in version 3.9.
- --without-decimal-contextvar¶
Baut das Erweiterungsmodul
_decimalmit einem Thread-lokalen Kontext anstelle eines Coroutine-lokalen Kontexts (Vorgabe), siehe das Moduldecimal.Siehe
decimal.HAVE_CONTEXTVARund das Modulcontextvars.Added in version 3.9.
- --with-dbmliborder=<list of backend names>¶
Überschreibt die Reihenfolge, in der die Datenbank-Backends für das Modul
dbmgeprüft werdenEin gültiger Wert ist eine mit Doppelpunkt (
:) getrennte Zeichenkette mit den Namen der Backends:ndbm;gdbm;bdb.
- --without-c-locale-coercion¶
Schaltet die Angleichung der C-Locale an eine UTF-8-basierte Locale ab (standardmäßig eingeschaltet).
Definiert das Makro
PY_COERCE_C_LOCALEnicht.Siehe
PYTHONCOERCECLOCALEund PEP 538.
- --without-freelists¶
Disable all freelists except the empty tuple singleton.
Added in version 3.11.
- --with-platlibdir=DIRNAME¶
Name des Verzeichnisses der Python-Bibliothek (Vorgabe ist
lib).Fedora und SuSE verwenden auf 64-Bit-Plattformen
lib64.Siehe
sys.platlibdir.Added in version 3.9.
- --with-wheel-pkg-dir=PATH¶
Verzeichnis der Wheel-Pakete, die das Modul
ensurepipverwendet (standardmäßig keines).Die Paketierungsrichtlinien einiger Linux-Distributionen empfehlen, Abhängigkeiten nicht beizulegen. Fedora installiert Wheel-Pakete zum Beispiel im Verzeichnis
/usr/share/python-wheels/und installiert das Paketensurepip._bundlednicht.Added in version 3.10.
- --with-pkg-config=[check|yes|no]¶
Ob configure pkg-config verwenden soll, um die Abhängigkeiten für den Build zu erkennen.
check(Vorgabe): pkg-config ist optionalyes: pkg-config ist zwingendno: configure verwendet pkg-config nicht, selbst wenn es vorhanden ist
Added in version 3.11.
- --enable-pystats¶
Schaltet die interne Erfassung von Leistungsdaten in Python ein.
Standardmäßig ist die Erfassung aus. Mit dem Befehl
python3 -X pystatsoder der UmgebungsvariablenPYTHONSTATS=1schaltest du die Erfassung beim Start von Python ein.Beim Beenden von Python werden die Daten ausgegeben, sofern die Erfassung eingeschaltet war und die Daten nicht gelöscht wurden.
Wirkung:
Fügt die Befehlszeilenoption
-X pystatshinzu.Fügt die Umgebungsvariable
PYTHONSTATShinzu.Definiert das Makro
Py_STATS.Fügt dem Modul
sysFunktionen hinzu:sys._stats_on(): Schaltet die Erfassung ein.sys._stats_off(): Schaltet die Erfassung aus.sys._stats_clear(): Löscht die Daten.sys._stats_dump(): Gibt die Daten in eine Datei aus und löscht sie.
Die Daten werden in eine beliebige (wahrscheinlich eindeutige) Datei in
/tmp/py_stats/(Unix) beziehungsweiseC:\temp\py_stats\(Windows) ausgegeben. Existiert dieses Verzeichnis nicht, werden die Ergebnisse auf stderr ausgegeben.Zum Lesen der Daten verwende
Tools/scripts/summarize_stats.py.Daten:
Opcode:
Spezialisierung: success, failure, hit, deferred, miss, deopt, failures;
Ausführungszahl;
Paarzahl.
Aufruf:
Inline eingesetzte Python-Aufrufe;
PyEval-Aufrufe;
Auf den Stapel gelegte Frames;
Erzeugte Frame-Objekte;
Eval-Aufrufe: vector, generator, legacy, function VECTORCALL, build class, slot, function „ex“, API, method.
Objekt:
incref und decref;
incref und decref des Interpreters;
Allokationen: alle, 512 Bytes, 4 kiB, groß;
Freigaben;
in und aus Freelists;
Wörterbuch materialisiert/dematerialisiert;
Typ-Cache;
Optimierungsversuche;
erzeugte und ausgeführte Optimierungs-Traces;
ausgeführte uops.
Garbage Collector:
Durchläufe der Garbage Collection;
besuchte Objekte;
eingesammelte Objekte.
Added in version 3.11.
- --disable-gil¶
Enables experimental support for running Python without the global interpreter lock (GIL): free threading build.
Definiert das Makro
Py_GIL_DISABLEDund fügt"t"zusys.abiflagshinzu.Mehr dazu steht unter Free-threaded CPython.
Added in version 3.13.
- --enable-experimental-jit=[no|yes|yes-off|interpreter]¶
Indicate how to integrate the JIT compiler.
no- build the interpreter without the JIT.yes- build the interpreter with the JIT.yes-off- build the interpreter with the JIT but disable it by default.interpreter- build the interpreter without the JIT, but with the tier 2 enabled interpreter.
By convention,
--enable-experimental-jitis a shorthand for--enable-experimental-jit=yes.Bemerkung
Wenn du CPython mit eingeschaltetem JIT baust, stelle sicher, dass auf deinem System Python 3.11 oder neuer installiert ist.
Added in version 3.13.
- PKG_CONFIG¶
Pfad zum Werkzeug
pkg-config.
- PKG_CONFIG_LIBDIR¶
- PKG_CONFIG_PATH¶
Optionen von
pkg-config.
3.3.2. Optionen des C-Compilers¶
- CC¶
Befehl des C-Compilers.
- CFLAGS¶
Flags des C-Compilers.
- CPP¶
Befehl des C-Präprozessors.
- CPPFLAGS¶
Flags des C-Präprozessors, etwa
-Iinclude_dir.
3.3.3. Optionen des Linkers¶
- LDFLAGS¶
Linker-Flags, etwa
-Llibrary_directory.
- LIBS¶
Bibliotheken, die an den Linker übergeben werden, etwa
-llibrary.
- MACHDEP¶
Name für maschinenabhängige Bibliotheksdateien.
3.3.4. Optionen für Abhängigkeiten von Dritten¶
Added in version 3.11.
- BZIP2_CFLAGS¶
- BZIP2_LIBS¶
C-Compiler- und Linker-Flags, um Python gegen
libbz2zu linken, verwendet vom Modulbz2, überschreibtpkg-config.
- CURSES_CFLAGS¶
- CURSES_LIBS¶
C-Compiler- und Linker-Flags für
libncursesoderlibncursesw, verwendet vom Modulcurses, überschreibtpkg-config.
- GDBM_CFLAGS¶
- GDBM_LIBS¶
C-Compiler- und Linker-Flags für
gdbm.
- LIBB2_CFLAGS¶
- LIBB2_LIBS¶
C compiler and linker flags for
libb2(BLAKE2), used byhashlibmodule, overridingpkg-config.
- LIBEDIT_CFLAGS¶
- LIBEDIT_LIBS¶
C-Compiler- und Linker-Flags für
libedit, verwendet vom Modulreadline, überschreibtpkg-config.
- LIBFFI_CFLAGS¶
- LIBFFI_LIBS¶
C-Compiler- und Linker-Flags für
libffi, verwendet vom Modulctypes, überschreibtpkg-config.
- LIBMPDEC_CFLAGS¶
- LIBMPDEC_LIBS¶
C-Compiler- und Linker-Flags für
libmpdec, verwendet vom Moduldecimal, überschreibtpkg-config.Bemerkung
Diese Umgebungsvariablen haben keine Wirkung, sofern nicht
--with-system-libmpdecangegeben ist.
- LIBLZMA_CFLAGS¶
- LIBLZMA_LIBS¶
C-Compiler- und Linker-Flags für
liblzma, verwendet vom Modullzma, überschreibtpkg-config.
- LIBREADLINE_CFLAGS¶
- LIBREADLINE_LIBS¶
C-Compiler- und Linker-Flags für
libreadline, verwendet vom Modulreadline, überschreibtpkg-config.
- LIBSQLITE3_CFLAGS¶
- LIBSQLITE3_LIBS¶
C-Compiler- und Linker-Flags für
libsqlite3, verwendet vom Modulsqlite3, überschreibtpkg-config.
- LIBUUID_CFLAGS¶
- LIBUUID_LIBS¶
C-Compiler- und Linker-Flags für
libuuid, verwendet vom Moduluuid, überschreibtpkg-config.
- PANEL_CFLAGS¶
- PANEL_LIBS¶
C-Compiler- und Linker-Flags für PANEL, überschreibt
pkg-config.C-Compiler- und Linker-Flags für
libpaneloderlibpanelw, verwendet vom Modulcurses.panel, überschreibtpkg-config.
- TCLTK_CFLAGS¶
- TCLTK_LIBS¶
C-Compiler- und Linker-Flags für TCLTK, überschreibt
pkg-config.
- ZLIB_CFLAGS¶
3.3.5. WebAssembly-Optionen¶
- --with-emscripten-target=[browser|node]¶
Set build flavor for
wasm32-emscripten.browser(default): preload minimal stdlib, default MEMFS.node: NODERAWFS and pthread support.
Added in version 3.11.
- --enable-wasm-dynamic-linking¶
Schaltet die Unterstützung für dynamisches Linken bei WASM ein.
Dynamisches Linken ermöglicht
dlopen. Die Dateigröße der ausführbaren Datei wächst, weil toter Code nur begrenzt entfernt werden kann und zusätzliche Funktionen hinzukommen.Added in version 3.11.
- --enable-wasm-pthreads¶
Schaltet die Unterstützung für pthreads bei WASM ein.
Added in version 3.11.
3.3.6. Optionen für die Installation¶
- --prefix=PREFIX¶
Installiert architekturunabhängige Dateien in PREFIX. Unter Unix ist die Vorgabe
/usr/local.Dieser Wert lässt sich zur Laufzeit über
sys.prefixabrufen.Mit
--prefix="$HOME/.local/"lässt sich Python zum Beispiel im eigenen Benutzerverzeichnis installieren.
- --exec-prefix=EPREFIX¶
Installiert architekturabhängige Dateien in EPREFIX, Vorgabe ist
--prefix.Dieser Wert lässt sich zur Laufzeit über
sys.exec_prefixabrufen.
3.3.7. Optionen für die Leistung¶
Für die beste Leistung wird empfohlen, Python mit --enable-optimizations --with-lto (PGO + LTO) zu konfigurieren. Auch das experimentelle Flag --enable-bolt lässt sich verwenden, um die Leistung zu verbessern.
- --enable-optimizations¶
Schaltet Profile Guided Optimization (PGO) über
PROFILE_TASKein (standardmäßig abgeschaltet).Der C-Compiler Clang benötigt für PGO das Programm
llvm-profdata. Unter macOS benötigt es auch GCC, denn GCC ist dort nur ein anderer Name für Clang.Schaltet außerdem die semantische Interposition in libpython ab, wenn
--enable-sharedund GCC verwendet werden: fügt-fno-semantic-interpositionzu den Compiler- und Linker-Flags hinzu.Bemerkung
Beim Bauen können Compiler-Warnungen auftreten, dass für einige Quelldateien keine Profildaten vorliegen. Diese Warnungen sind harmlos, weil beim Erfassen der Profildaten nur ein Teil des Codes durchlaufen wird. Um sie bei Clang abzuschalten, unterdrücke sie von Hand, indem du
-Wno-profile-instr-unprofiledzuCFLAGShinzufügst.Added in version 3.6.
Geändert in Version 3.10: Verwendet
-fno-semantic-interpositionbei GCC.
- PROFILE_TASK¶
Im Makefile verwendete Umgebungsvariable: die Python-Befehlszeilenargumente für die Aufgabe, die das Profil erzeugt.
Vorgabe:
-m test --pgo --timeout=$(TESTTIMEOUT).Added in version 3.8.
Geändert in Version 3.13: Ein Fehlschlag der Aufgabe wird nicht mehr stillschweigend übergangen.
- --with-lto=[full|thin|no|yes]¶
Schaltet Link Time Optimization (LTO) in jedem Build ein (standardmäßig abgeschaltet).
Der C-Compiler Clang benötigt für LTO
llvm-ar(unter macOSar) sowie einen LTO-fähigen Linker (ld.goldoderlld).Added in version 3.6.
Added in version 3.11: Um ThinLTO zu verwenden, nimm bei Clang
--with-lto=thin.Geändert in Version 3.12: Verwendet ThinLTO bei Clang als Standardvorgehen für die Optimierung, sofern der Compiler das Flag annimmt.
- --enable-bolt¶
Schaltet die Verwendung des BOLT post-link binary optimizer ein (standardmäßig abgeschaltet).
BOLT ist Teil des LLVM-Projekts, aber nicht immer in dessen Binärdistributionen enthalten. Dieses Flag setzt voraus, dass
llvm-boltundmerge-fdataverfügbar sind.BOLT ist noch ein recht junges Projekt, dieses Flag sollte daher vorläufig als experimentell gelten. Weil das Werkzeug auf Maschinencode arbeitet, hängt sein Erfolg von der Kombination aus Bauumgebung, den übrigen Optimierungsargumenten von configure und der CPU-Architektur ab, und nicht alle Kombinationen werden unterstützt. Von BOLT-Versionen vor LLVM 16 ist bekannt, dass BOLT in manchen Fällen abstürzt. Für die Optimierung mit BOLT wird LLVM 16 oder neuer dringend empfohlen.
Mit den configure-Variablen
BOLT_INSTRUMENT_FLAGSundBOLT_APPLY_FLAGSlässt sich der Standardsatz an Argumenten für llvm-bolt überschreiben, mit denen Binärdateien instrumentiert beziehungsweise BOLT-Daten auf sie angewandt werden.Added in version 3.12.
- BOLT_APPLY_FLAGS¶
Argumente für
llvm-boltbeim Erzeugen einer mit BOLT optimierten Binärdatei.Added in version 3.12.
- BOLT_INSTRUMENT_FLAGS¶
Argumente für
llvm-boltbeim Instrumentieren von Binärdateien.Added in version 3.12.
- --with-computed-gotos¶
Schaltet berechnete gotos in der Auswertungsschleife ein (auf unterstützten Compilern standardmäßig eingeschaltet).
- --without-mimalloc¶
Schaltet den schnellen Allokator mimalloc ab (standardmäßig eingeschaltet).
Siehe auch die Umgebungsvariable
PYTHONMALLOC.
- --without-pymalloc¶
Schaltet den spezialisierten Python-Speicherallokator pymalloc ab (standardmäßig eingeschaltet).
Siehe auch die Umgebungsvariable
PYTHONMALLOC.
- --without-doc-strings¶
Schaltet statische Dokumentationszeichenketten ab, um den Speicherbedarf zu verringern (standardmäßig eingeschaltet). In Python definierte Dokumentationszeichenketten sind davon nicht betroffen.
Definiert das Makro
WITH_DOC_STRINGSnicht.Siehe das Makro
PyDoc_STRVAR().
- --enable-profiling¶
Schaltet die Profilierung von Code auf C-Ebene mit
gprofein (standardmäßig abgeschaltet).
- --with-strict-overflow¶
Fügt
-fstrict-overflowzu den Flags des C-Compilers hinzu (standardmäßig fügen wir stattdessen-fno-strict-overflowhinzu).
3.3.8. Debug-Build von Python¶
Ein Debug-Build ist ein Python, das mit der configure-Option --with-pydebug gebaut wurde.
Wirkung eines Debug-Builds:
Zeigt standardmäßig alle Warnungen an: die Liste der Standard-Warnfilter im Modul
warningsist leer.Fügt
dzusys.abiflagshinzu.Fügt die Funktion
sys.gettotalrefcount()hinzu.Fügt die Befehlszeilenoption
-X showrefcounthinzu.Fügt die Befehlszeilenoption
-dund die UmgebungsvariablePYTHONDEBUGhinzu, um den Parser zu untersuchen.Fügt Unterstützung für die Variable
__lltrace__hinzu: schaltet die Verfolgung auf niedriger Ebene in der Bytecode-Auswertungsschleife ein, wenn die Variable definiert ist.Installiert Debug-Haken an den Speicherallokatoren, um Pufferüberläufe und andere Speicherfehler zu erkennen.
Definiert die Makros
Py_DEBUGundPy_REF_DEBUG.Fügt Laufzeitprüfungen hinzu: Code, der von
#ifdef Py_DEBUGund#endifumgeben ist. Schaltet die Zusicherungenassert(...)und_PyObject_ASSERT(...)ein, indem das MakroNDEBUGnicht gesetzt wird (siehe auch die configure-Option--with-assertions). Die wichtigsten Laufzeitprüfungen:Fügt Plausibilitätsprüfungen der Funktionsargumente hinzu.
Unicode- und int-Objekte werden mit einem Muster im Speicher erzeugt, damit die Verwendung nicht initialisierter Objekte auffällt.
Stellt sicher, dass Funktionen, die die aktuelle Ausnahme löschen oder ersetzen können, nicht bei ausgelöster Ausnahme aufgerufen werden.
Prüft, dass Freigabefunktionen die aktuelle Ausnahme nicht verändern.
Der Garbage Collector (Funktion
gc.collect()) führt einige grundlegende Prüfungen der Objektkonsistenz durch.Das Makro
Py_SAFE_DOWNCAST()prüft auf Unter- und Überlauf von Ganzzahlen, wenn von breiten auf schmale Typen herabgecastet wird.
Siehe auch den Entwicklungsmodus von Python und die configure-Option --with-trace-refs.
Geändert in Version 3.8: Release-Builds sind nun ABI-verträglich mit Debug-Builds: das Definieren des Makros Py_DEBUG zieht das Makro Py_TRACE_REFS nicht mehr nach sich (siehe die Option --with-trace-refs). Debug-Builds legen allerdings weiterhin mehr Symbole offen als Release-Builds, und Code, der gegen einen Debug-Build gebaut wurde, ist nicht zwangsläufig mit einem Release-Build verträglich.
3.3.9. Debug-Optionen¶
- --with-pydebug¶
Baut Python im Debug-Modus: definiert das Makro
Py_DEBUG(standardmäßig abgeschaltet).
- --with-trace-refs¶
Schaltet die Verfolgung von Referenzen zur Fehlersuche ein (standardmäßig abgeschaltet).
Wirkung:
Definiert das Makro
Py_TRACE_REFS.Fügt die Funktion
sys.getobjects()hinzu.Fügt die Umgebungsvariable
PYTHONDUMPREFShinzu.
Mit der Umgebungsvariablen
PYTHONDUMPREFSlassen sich Objekte und Referenzzähler ausgeben, die beim Beenden von Python noch leben.Statisch belegte Objekte werden nicht verfolgt.
Added in version 3.8.
Geändert in Version 3.13: Dieser Build ist nun ABI-verträglich mit dem Release-Build und dem Debug-Build.
- --with-assertions¶
Baut mit eingeschalteten C-Zusicherungen (Vorgabe ist nein):
assert(...);und_PyObject_ASSERT(...);.Wenn gesetzt, wird das Makro
NDEBUGin der Compiler-VariablenOPTnicht definiert.Siehe auch die Option
--with-pydebug(Debug-Build), die Zusicherungen ebenfalls einschaltet.Added in version 3.6.
- --with-valgrind¶
Schaltet die Unterstützung für Valgrind ein (Vorgabe ist nein).
- --with-dtrace¶
Schaltet die Unterstützung für DTrace ein (Vorgabe ist nein).
Siehe CPython mit DTrace und SystemTap instrumentieren.
Added in version 3.6.
- --with-address-sanitizer¶
Schaltet den Speicherfehlersucher AddressSanitizer ein,
asan(Vorgabe ist nein). Um die Erkennungsfähigkeiten von ASan zu verbessern, verbindest du das vielleicht noch mit--without-pymalloc, um den spezialisierten Allokator für kleine Objekte abzuschalten, dessen Belegungen ASan nicht verfolgt.Added in version 3.6.
- --with-memory-sanitizer¶
Schaltet den Belegungsfehlersucher MemorySanitizer ein,
msan(Vorgabe ist nein).Added in version 3.6.
- --with-undefined-behavior-sanitizer¶
Schaltet den Sucher für undefiniertes Verhalten UndefinedBehaviorSanitizer ein,
ubsan(Vorgabe ist nein).Added in version 3.6.
- --with-thread-sanitizer¶
Schaltet den Wettlaufsucher ThreadSanitizer ein,
tsan(Vorgabe ist nein).Added in version 3.13.
3.3.10. Optionen des Linkers¶
Schaltet das Bauen einer gemeinsam genutzten Python-Bibliothek ein:
libpython(Vorgabe ist nein).
- --without-static-libpython¶
Baut
libpythonMAJOR.MINOR.anicht und installiertpython.onicht (wird standardmäßig gebaut und eingeschaltet).Added in version 3.10.
3.3.11. Optionen für Bibliotheken¶
- --with-libs='lib1 ...'¶
Linkt gegen zusätzliche Bibliotheken (Vorgabe ist nein).
- --with-system-expat¶
Baut das Modul
pyexpatmit einer installiertenexpat-Bibliothek (Vorgabe ist nein).
- --with-system-libmpdec¶
Baut das Erweiterungsmodul
_decimalmit einer installiertenmpdecimal-Bibliothek, siehe das Moduldecimal(Vorgabe ist ja).Added in version 3.3.
Geändert in Version 3.13: Verwendet standardmäßig die installierte
mpdecimal-Bibliothek.Veraltet seit Version 3.13, wird in Version 3.16 entfernt: Eine Kopie der Quellen der
mpdecimal-Bibliothek wird mit Python 3.16 nicht mehr ausgeliefert.Siehe auch
- --with-readline=readline|editline¶
Bestimmt eine Backend-Bibliothek für das Modul
readline.readline: Verwendet readline als Backend.
editline: Verwendet editline als Backend.
Added in version 3.10.
- --without-readline¶
Baut das Modul
readlinenicht (wird standardmäßig gebaut).Definiert das Makro
HAVE_LIBREADLINEnicht.Added in version 3.10.
- --with-libm=STRING¶
Überschreibt die Mathematikbibliothek
libmmit STRING (Vorgabe ist systemabhängig).
- --with-libc=STRING¶
Überschreibt die C-Bibliothek
libcmit STRING (Vorgabe ist systemabhängig).
- --with-openssl=DIR¶
Wurzelverzeichnis von OpenSSL.
Added in version 3.7.
- --with-openssl-rpath=[no|auto|DIR]¶
Legt das Laufzeit-Bibliotheksverzeichnis (rpath) für die OpenSSL-Bibliotheken fest:
no(Vorgabe): setzt keinen rpath;auto: ermittelt den rpath selbsttätig aus--with-opensslundpkg-config;DIR: setzt einen ausdrücklichen rpath.
Added in version 3.10.
3.3.12. Sicherheitsoptionen¶
- --with-hash-algorithm=[fnv|siphash13|siphash24]¶
Wählt den Hash-Algorithmus für die Verwendung in
Python/pyhash.c:siphash13(default);siphash24;fnv.
Added in version 3.4.
Added in version 3.11:
siphash13kam hinzu und ist die neue Vorgabe.
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
Integrierte Hash-Module:
md5;sha1;sha256;sha512;sha3(mit shake);blake2.
Added in version 3.9.
- --with-ssl-default-suites=[python|openssl|STRING]¶
Überschreibt die Zeichenkette der Standard-Cipher-Suites von OpenSSL:
python(Vorgabe): verwendet die von Python bevorzugte Auswahl;openssl: lässt die Vorgaben von OpenSSL unangetastet;STRING: verwendet eine eigene Zeichenkette
Siehe das Modul
ssl.Added in version 3.7.
Geändert in Version 3.10: Die Einstellungen
pythonund STRING setzen zusätzlich TLS 1.2 als niedrigste Protokollversion.
3.3.13. macOS-Optionen¶
Siehe Mac/README.rst.
- --enable-universalsdk¶
- --enable-universalsdk=SDKDIR¶
Erzeugt einen Build als universelle Binärdatei. SDKDIR gibt an, welches macOS-SDK für den Build verwendet werden soll (Vorgabe ist nein).
- --enable-framework¶
- --enable-framework=INSTALLDIR¶
Erzeugt ein Python.framework anstelle einer herkömmlichen Unix-Installation. Das optionale INSTALLDIR gibt den Installationspfad an (Vorgabe ist nein).
- --with-universal-archs=ARCH¶
Gibt an, welche Art universeller Binärdatei erzeugt werden soll. Diese Option ist nur gültig, wenn
--enable-universalsdkgesetzt ist.Optionen:
universal2(x86-64 und arm64);32-bit(PPC und i386);64-bit(PPC64 und x86-64);3-way(i386, PPC und x86-64);intel(i386 und x86-64);intel-32(i386);intel-64(x86-64);all(PPC, i386, PPC64 und x86-64).
Beachte, dass die Werte für diesen Konfigurationspunkt nicht dieselben sind wie die Bezeichner für universelle Binär-Wheels unter macOS. Einzelheiten zu den unter macOS verwendeten Plattform-Verträglichkeits-Tags stehen im Python Packaging User Guide
- --with-framework-name=FRAMEWORK¶
Gibt den Namen des Python-Frameworks unter macOS an, nur gültig, wenn
--enable-frameworkgesetzt ist (Vorgabe:Python).
- --with-app-store-compliance¶
- --with-app-store-compliance=PATCH-FILE¶
Die Python-Standardbibliothek enthält Zeichenketten, von denen bekannt ist, dass sie bei der Einreichung für den macOS- und iOS-App-Store Fehler automatischer Prüfwerkzeuge auslösen. Ist diese Option eingeschaltet, wendet sie die Liste der Patches an, von denen bekannt ist, dass sie die Vorgaben der App-Stores erfüllen. Eine eigene Patch-Datei lässt sich ebenfalls angeben. Diese Option ist standardmäßig abgeschaltet.
Added in version 3.13.
3.3.14. iOS-Optionen¶
Siehe iOS/README.rst.
- --enable-framework=INSTALLDIR¶
Erzeugt ein Python.framework. Anders als unter macOS ist das Argument INSTALLDIR, das den Installationspfad angibt, zwingend.
- --with-framework-name=FRAMEWORK¶
Gibt den Namen des Frameworks an (Vorgabe:
Python).
3.3.15. Optionen für das Cross-Kompilieren¶
Mit Cross-Kompilieren, auch Cross-Bauen genannt, lässt sich Python für eine andere CPU-Architektur oder Plattform bauen. Cross-Kompilieren setzt einen Python-Interpreter für die Bauplattform voraus. Die Version des bauenden Python muss zur Version des cross-kompilierten Ziel-Python passen.
- --build=BUILD¶
konfiguriert für das Bauen auf BUILD, wird üblicherweise von config.guess erraten.
- --host=HOST¶
cross-kompiliert, um Programme zu bauen, die auf HOST (der Zielplattform) laufen
- --with-build-python=path/to/python¶
Pfad zur ausführbaren
python-Datei des Builds für das Cross-KompilierenAdded in version 3.11.
- CONFIG_SITE=file¶
Eine Umgebungsvariable, die auf eine Datei mit Überschreibungen für configure verweist.
Beispiel für eine Datei config.site:
# config.site-aarch64 ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no
- HOSTRUNNER¶
Programm, mit dem CPython für die Zielplattform beim Cross-Kompilieren ausgeführt wird.
Added in version 3.11.
Beispiel für Cross-Kompilieren:
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. Das Bausystem von Python¶
3.4.1. Die wichtigsten Dateien des Bausystems¶
configure.ac=>configure;Makefile.pre.in=>Makefile(vonconfigureerzeugt);pyconfig.h(vonconfigureerzeugt);Modules/Setup: C-Erweiterungen, die das Makefile mit dem Shell-SkriptModule/makesetupbaut;
3.4.2. Die wichtigsten Bauschritte¶
C-Dateien (
.c) werden zu Objektdateien (.o) gebaut.Aus den Objektdateien wird eine statische
libpython-Bibliothek (.a) erzeugt.python.ound die statischelibpython-Bibliothek werden zum endgültigen Programmpythongelinkt.C-Erweiterungen baut das Makefile (siehe
Modules/Setup).
3.4.3. Die wichtigsten Makefile-Ziele¶
3.4.3.1. make¶
Wenn du nach einer Codeänderung oder einem Auffrischen deines Checkouts von Upstream neu baust, genügt meist make. Das baut (gemäß der Semantik von Make) das Standardziel, nämlich das erste im Makefile definierte. Herkömmlich — auch im CPython-Projekt — ist das üblicherweise das Ziel all. Das Skript configure setzt eine autoconf-Variable @DEF_MAKE_ALL_RULE@ ein, die genau beschreibt, welche Ziele make all baut. Es gibt drei Möglichkeiten:
profile-opt(konfiguriert mit--enable-optimizations)build_wasm(configured with--with-emscripten-target)build_all(konfiguriert, ohne eines der beiden anderen ausdrücklich zu verwenden)
Je nach den letzten Änderungen an den Quelldateien baut Make alle Ziele (Objektdateien und ausführbare Dateien) neu, die es für veraltet hält, und ruft bei Bedarf auch configure erneut auf. Die Abhängigkeiten zwischen Quellen und Zielen sind allerdings zahlreich und werden von Hand gepflegt, Make hat daher manchmal nicht alle Angaben, um zuverlässig alle neu zu bauenden Ziele zu erkennen. Je nachdem, welche Ziele nicht neu gebaut werden, können verschiedene Probleme auftreten. Wenn du Bau- oder Testprobleme hast, die du nicht anders erklären kannst, umgeht make clean && make die meisten Abhängigkeitsprobleme — auf Kosten längerer Bauzeiten.
3.4.3.2. make platform¶
Baut das Programm python, aber nicht die Erweiterungsmodule der Standardbibliothek. Dabei entsteht eine Datei namens platform, die in einer einzigen Zeile die Einzelheiten der Bauplattform beschreibt, etwa macosx-14.3-arm64-3.12 oder linux-x86_64-3.13.
3.4.3.3. make profile-opt¶
Baut Python mit profilgeführter Optimierung (PGO). Mit der configure-Option --enable-optimizations machst du das zum Standardziel des Befehls make (make all oder einfach make).
3.4.3.4. make clean¶
Entfernt die gebauten Dateien.
3.4.3.5. make distclean¶
Entfernt zusätzlich zu dem, was make clean tut, die vom Skript configure erzeugten Dateien. configure muss dann vor dem nächsten Bauen erneut ausgeführt werden. [1]
3.4.3.6. make install¶
Baut das Ziel all und installiert Python.
3.4.3.7. make test¶
Build the all target and run the Python test suite with the
--fast-ci option. Variables:
TESTOPTS: zusätzliche Befehlszeilenoptionen für regrtest.TESTPYTHONOPTS: zusätzliche Befehlszeilenoptionen für Python.TESTTIMEOUT: Zeitgrenze in Sekunden (Vorgabe: 10 Minuten).
3.4.3.8. make buildbottest¶
Entspricht make test, verwendet aber die Option --slow-ci und eine Standard-Zeitgrenze von 20 Minuten anstelle der Option --fast-ci.
3.4.3.9. make regen-all¶
Erzeugt (fast) alle erzeugten Dateien neu. Dazu gehören unter anderem die Bytecode-Fälle und die Datei des Parsergenerators. make regen-stdlib-module-names und autoconf müssen für die übrigen erzeugten Dateien getrennt ausgeführt werden.
3.4.4. C-Erweiterungen¶
Einige C-Erweiterungen werden als integrierte Module gebaut, etwa das Modul sys. Sie werden mit definiertem Makro Py_BUILD_CORE_BUILTIN gebaut. Integrierte Module haben kein Attribut __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__'
Andere C-Erweiterungen werden als dynamische Bibliotheken gebaut, etwa das Modul _asyncio. Sie werden mit definiertem Makro Py_BUILD_CORE_MODULE gebaut. Beispiel unter 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 dient dazu, Makefile-Ziele zum Bauen der C-Erweiterungen zu erzeugen. Am Anfang der Datei werden C-Erweiterungen als integrierte Module gebaut. Erweiterungen, die nach der Marke *shared* definiert sind, werden als dynamische Bibliotheken gebaut.
Die Makros PyAPI_FUNC(), PyAPI_DATA() und PyMODINIT_FUNC aus Include/exports.h werden unterschiedlich definiert, je nachdem, ob das Makro Py_BUILD_CORE_MODULE definiert ist:
Verwendet
Py_EXPORTED_SYMBOL, wennPy_BUILD_CORE_MODULEdefiniert istVerwendet andernfalls
Py_IMPORTED_SYMBOL.
Wird das Makro Py_BUILD_CORE_BUILTIN versehentlich bei einer C-Erweiterung verwendet, die als gemeinsam genutzte Bibliothek gebaut wird, wird deren Funktion PyInit_xxx() nicht exportiert, was beim Import einen ImportError auslöst.
3.5. Compiler- und Linker-Flags¶
Optionen, die das Skript ./configure und Umgebungsvariablen setzen und die das Makefile verwendet.
3.5.1. Flags des Präprozessors¶
- CONFIGURE_CPPFLAGS¶
Wert der Variablen
CPPFLAGS, der an das Skript./configureübergeben wird.Added in version 3.6.
- CPPFLAGS¶
Flags des (Objective-)C/C++-Präprozessors, etwa
-Iinclude_dir, wenn deine Headerdateien in einem nicht standardmäßigen Verzeichnis include_dir liegen.Sowohl
CPPFLAGSals auchLDFLAGSmüssen den Wert aus der Shell enthalten, damit sich Erweiterungsmodule mit den in den Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.
- BASECPPFLAGS¶
Added in version 3.4.
- PY_CPPFLAGS¶
Zusätzliche Präprozessor-Flags, die beim Bauen der Objektdateien des Interpreters hinzugefügt werden.
Vorgabe:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).Added in version 3.2.
3.5.2. Compiler-Flags¶
- CC¶
Befehl des C-Compilers.
Beispiel:
gcc -pthread.
- CXX¶
Befehl des C++-Compilers.
Beispiel:
g++ -pthread.
- CFLAGS¶
Flags des C-Compilers.
- CFLAGS_NODIST¶
CFLAGS_NODISTdient dem Bauen des Interpreters und der C-Erweiterungen der Standardbibliothek. Verwende es, wenn ein Compiler-Flag nach der Installation von Python nicht Teil vonCFLAGSsein soll (gh-65320).Insbesondere sollte
CFLAGSnicht enthalten:das Compiler-Flag
-I(das den Suchpfad für Include-Dateien setzt). Die-I-Flags werden von links nach rechts verarbeitet, Flags inCFLAGShätten daher Vorrang vor-I-Flags, die Benutzer oder Pakete mitgeben.Härtungsflags wie
-Werror, weil Distributionen nicht steuern können, ob von Benutzern installierte Pakete solchen verschärften Maßstäben entsprechen.
Added in version 3.5.
- COMPILEALL_OPTS¶
Optionen, die beim Erzeugen der PYC-Dateien in
make installan die Befehlszeile voncompileallübergeben werden. Vorgabe:-j0.Added in version 3.12.
- EXTRA_CFLAGS¶
Zusätzliche Flags für den C-Compiler.
- CONFIGURE_CFLAGS¶
Wert der Variablen
CFLAGS, der an das Skript./configureübergeben wird.Added in version 3.2.
- CONFIGURE_CFLAGS_NODIST¶
Wert der Variablen
CFLAGS_NODIST, der an das Skript./configureübergeben wird.Added in version 3.5.
- BASECFLAGS¶
Grundlegende Compiler-Flags.
- OPT¶
Optimierungsflags.
- CFLAGS_ALIASING¶
Flags für strenges oder nicht strenges Aliasing, mit denen
Python/dtoa.ckompiliert wird.Added in version 3.7.
- CCSHARED¶
Compiler-Flags zum Bauen einer gemeinsam genutzten Bibliothek.
Unter Linux und BSD wird zum Beispiel
-fPICverwendet.
- CFLAGSFORSHARED¶
Zusätzliche C-Flags, die beim Bauen der Objektdateien des Interpreters hinzugefügt werden.
Vorgabe:
$(CCSHARED), wenn--enable-sharedverwendet wird, andernfalls eine leere Zeichenkette.
- PY_CFLAGS¶
Vorgabe:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).
- PY_CFLAGS_NODIST¶
Vorgabe:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.Added in version 3.5.
- PY_STDMODULE_CFLAGS¶
C-Flags, mit denen die Objektdateien des Interpreters gebaut werden.
Vorgabe:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).Added in version 3.7.
- PY_CORE_CFLAGS¶
Vorgabe:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.Added in version 3.2.
- PY_BUILTIN_MODULE_CFLAGS¶
Compiler-Flags, um ein Erweiterungsmodul der Standardbibliothek als integriertes Modul zu bauen, etwa das Modul
posix.Vorgabe:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.Added in version 3.8.
- PURIFY¶
Befehl für Purify. Purify ist ein Programm zur Speicherfehlersuche.
Vorgabe: leere Zeichenkette (nicht verwendet).
3.5.3. Linker-Flags¶
- LINKCC¶
Linker-Befehl, mit dem Programme wie
pythonund_testembedgebaut werden.Vorgabe:
$(PURIFY) $(CC).
- CONFIGURE_LDFLAGS¶
Wert der Variablen
LDFLAGS, der an das Skript./configureübergeben wird.Vermeide es,
CFLAGS,LDFLAGSund so weiter zuzuweisen, damit Benutzer sie auf der Befehlszeile verwenden können, um etwas an diese Werte anzuhängen, ohne die vorbelegten Werte zu zertreten.Added in version 3.2.
- LDFLAGS_NODIST¶
LDFLAGS_NODISTwird genauso verwendet wieCFLAGS_NODIST. Verwende es, wenn ein Linker-Flag nach der Installation von Python nicht Teil vonLDFLAGSsein soll (gh-65320).Insbesondere sollte
LDFLAGSnicht enthalten:das Compiler-Flag
-L(das den Suchpfad für Bibliotheken setzt). Die-L-Flags werden von links nach rechts verarbeitet, Flags inLDFLAGShätten daher Vorrang vor-L-Flags, die Benutzer oder Pakete mitgeben.
- CONFIGURE_LDFLAGS_NODIST¶
Wert der Variablen
LDFLAGS_NODIST, der an das Skript./configureübergeben wird.Added in version 3.8.
- LDFLAGS¶
Linker-Flags, etwa
-Llib_dir, wenn deine Bibliotheken in einem nicht standardmäßigen Verzeichnis lib_dir liegen.Sowohl
CPPFLAGSals auchLDFLAGSmüssen den Wert aus der Shell enthalten, damit sich Erweiterungsmodule mit den in den Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.
- LIBS¶
Linker-Flags, um dem Linker beim Linken der ausführbaren Python-Datei Bibliotheken zu übergeben.
Beispiel:
-lrt.
- LDSHARED¶
Befehl zum Bauen einer gemeinsam genutzten Bibliothek.
Vorgabe:
@LDSHARED@ $(PY_LDFLAGS).
- BLDSHARED¶
Befehl zum Bauen der gemeinsam genutzten Bibliothek
libpython.Vorgabe:
@BLDSHARED@ $(PY_CORE_LDFLAGS).
- PY_LDFLAGS¶
Vorgabe:
$(CONFIGURE_LDFLAGS) $(LDFLAGS).
- PY_LDFLAGS_NODIST¶
Vorgabe:
$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).Added in version 3.8.
- PY_CORE_LDFLAGS¶
Linker-Flags, mit denen die Objektdateien des Interpreters gebaut werden.
Added in version 3.8.
Fußnoten