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 ssl and hashlib extension 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 sqlite3 extension module.

  • Tcl/Tk 8.5.12 for the tkinter module.

  • libmpdec 2.5.0 for the decimal module.

  • Autoconf 2.71 and aclocal 1.16.5 are required to regenerate the configure script.

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 _sqlite des Moduls sqlite3 (Vorgabe ist nein).

Siehe die Methode sqlite3.Connection.enable_load_extension() des Moduls sqlite3.

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-int in Bit fest: 15 oder 30 Bit.

Standardmäßig beträgt die Zifferngröße 30.

Setzt PYLONG_BITS_IN_DIGIT auf 15 oder 30.

Siehe sys.int_info.bits_per_digit.

--with-suffix=SUFFIX

Setzt das Suffix der ausführbaren Python-Datei auf SUFFIX.

Das Standardsuffix ist .exe unter Windows und macOS (ausführbare Datei python.exe), .js bei Emscripten node, .html bei Emscripten browser, .wasm bei WASI und eine leere Zeichenkette auf den übrigen Plattformen (ausführbare Datei python).

Geändert in Version 3.11: Das Standardsuffix auf der WASM-Plattform ist eines von .js, .html oder .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 Moduls zoneinfo.

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 _decimal mit einem Thread-lokalen Kontext anstelle eines Coroutine-lokalen Kontexts (Vorgabe), siehe das Modul decimal.

Siehe decimal.HAVE_CONTEXTVAR und das Modul contextvars.

Added in version 3.9.

--with-dbmliborder=<list of backend names>

Überschreibt die Reihenfolge, in der die Datenbank-Backends für das Modul dbm geprüft werden

Ein 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_LOCALE nicht.

Siehe PYTHONCOERCECLOCALE und 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 ensurepip verwendet (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 Paket ensurepip._bundled nicht.

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 optional

  • yes: pkg-config ist zwingend

  • no: 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 pystats oder der Umgebungsvariablen PYTHONSTATS=1 schaltest 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 pystats hinzu.

  • Fügt die Umgebungsvariable PYTHONSTATS hinzu.

  • Definiert das Makro Py_STATS.

  • Fügt dem Modul sys Funktionen 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) beziehungsweise C:\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_DISABLED und fügt "t" zu sys.abiflags hinzu.

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-jit is 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 libbz2 zu linken, verwendet vom Modul bz2, überschreibt pkg-config.

CURSES_CFLAGS
CURSES_LIBS

C-Compiler- und Linker-Flags für libncurses oder libncursesw, verwendet vom Modul curses, überschreibt pkg-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 by hashlib module, overriding pkg-config.

LIBEDIT_CFLAGS
LIBEDIT_LIBS

C-Compiler- und Linker-Flags für libedit, verwendet vom Modul readline, überschreibt pkg-config.

LIBFFI_CFLAGS
LIBFFI_LIBS

C-Compiler- und Linker-Flags für libffi, verwendet vom Modul ctypes, überschreibt pkg-config.

LIBMPDEC_CFLAGS
LIBMPDEC_LIBS

C-Compiler- und Linker-Flags für libmpdec, verwendet vom Modul decimal, überschreibt pkg-config.

Bemerkung

Diese Umgebungsvariablen haben keine Wirkung, sofern nicht --with-system-libmpdec angegeben ist.

LIBLZMA_CFLAGS
LIBLZMA_LIBS

C-Compiler- und Linker-Flags für liblzma, verwendet vom Modul lzma, überschreibt pkg-config.

LIBREADLINE_CFLAGS
LIBREADLINE_LIBS

C-Compiler- und Linker-Flags für libreadline, verwendet vom Modul readline, überschreibt pkg-config.

LIBSQLITE3_CFLAGS
LIBSQLITE3_LIBS

C-Compiler- und Linker-Flags für libsqlite3, verwendet vom Modul sqlite3, überschreibt pkg-config.

LIBUUID_CFLAGS
LIBUUID_LIBS

C-Compiler- und Linker-Flags für libuuid, verwendet vom Modul uuid, überschreibt pkg-config.

PANEL_CFLAGS
PANEL_LIBS

C-Compiler- und Linker-Flags für PANEL, überschreibt pkg-config.

C-Compiler- und Linker-Flags für libpanel oder libpanelw, verwendet vom Modul curses.panel, überschreibt pkg-config.

TCLTK_CFLAGS
TCLTK_LIBS

C-Compiler- und Linker-Flags für TCLTK, überschreibt pkg-config.

ZLIB_CFLAGS
ZLIB_LIBS

C-Compiler- und Linker-Flags für libzlib, verwendet vom Modul gzip, überschreibt pkg-config.

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.prefix abrufen.

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_prefix abrufen.

--disable-test-modules

Baut und installiert die Testmodule nicht, etwa das Paket test oder das Erweiterungsmodul _testcapi (werden standardmäßig gebaut und installiert).

Added in version 3.10.

--with-ensurepip=[upgrade|install|no]

Wählt den Befehl von ensurepip, der bei der Python-Installation ausgeführt wird:

  • upgrade (Vorgabe): führt python -m ensurepip --altinstall --upgrade aus.

  • install: führt python -m ensurepip --altinstall aus;

  • no: führt ensurepip nicht aus;

Added in version 3.6.

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_TASK ein (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-shared und GCC verwendet werden: fügt -fno-semantic-interposition zu 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-unprofiled zu CFLAGS hinzufügst.

Added in version 3.6.

Geändert in Version 3.10: Verwendet -fno-semantic-interposition bei 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 macOS ar) sowie einen LTO-fähigen Linker (ld.gold oder lld).

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-bolt und merge-fdata verfü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_FLAGS und BOLT_APPLY_FLAGS lä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-bolt beim Erzeugen einer mit BOLT optimierten Binärdatei.

Added in version 3.12.

BOLT_INSTRUMENT_FLAGS

Argumente für llvm-bolt beim 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_STRINGS nicht.

Siehe das Makro PyDoc_STRVAR().

--enable-profiling

Schaltet die Profilierung von Code auf C-Ebene mit gprof ein (standardmäßig abgeschaltet).

--with-strict-overflow

Fügt -fstrict-overflow zu den Flags des C-Compilers hinzu (standardmäßig fügen wir stattdessen -fno-strict-overflow hinzu).

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 warnings ist leer.

  • Fügt d zu sys.abiflags hinzu.

  • Fügt die Funktion sys.gettotalrefcount() hinzu.

  • Fügt die Befehlszeilenoption -X showrefcount hinzu.

  • Fügt die Befehlszeilenoption -d und die Umgebungsvariable PYTHONDEBUG hinzu, 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_DEBUG und Py_REF_DEBUG.

  • Fügt Laufzeitprüfungen hinzu: Code, der von #ifdef Py_DEBUG und #endif umgeben ist. Schaltet die Zusicherungen assert(...) und _PyObject_ASSERT(...) ein, indem das Makro NDEBUG nicht 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:

Mit der Umgebungsvariablen PYTHONDUMPREFS lassen 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 NDEBUG in der Compiler-Variablen OPT nicht 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

--enable-shared

Schaltet das Bauen einer gemeinsam genutzten Python-Bibliothek ein: libpython (Vorgabe ist nein).

--without-static-libpython

Baut libpythonMAJOR.MINOR.a nicht und installiert python.o nicht (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 pyexpat mit einer installierten expat-Bibliothek (Vorgabe ist nein).

--with-system-libmpdec

Baut das Erweiterungsmodul _decimal mit einer installierten mpdecimal-Bibliothek, siehe das Modul decimal (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

LIBMPDEC_CFLAGS and LIBMPDEC_LIBS.

--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 readline nicht (wird standardmäßig gebaut).

Definiert das Makro HAVE_LIBREADLINE nicht.

Added in version 3.10.

--with-libm=STRING

Überschreibt die Mathematikbibliothek libm mit STRING (Vorgabe ist systemabhängig).

--with-libc=STRING

Überschreibt die C-Bibliothek libc mit 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-openssl und pkg-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: siphash13 kam 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 python und 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-universalsdk gesetzt 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-framework gesetzt 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-Kompilieren

Added 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 (von configure erzeugt);

  • pyconfig.h (von configure erzeugt);

  • Modules/Setup: C-Erweiterungen, die das Makefile mit dem Shell-Skript Module/makesetup baut;

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.o und die statische libpython-Bibliothek werden zum endgültigen Programm python gelinkt.

  • 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, wenn Py_BUILD_CORE_MODULE definiert ist

  • Verwendet 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 CPPFLAGS als auch LDFLAGS mü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_NODIST dient dem Bauen des Interpreters und der C-Erweiterungen der Standardbibliothek. Verwende es, wenn ein Compiler-Flag nach der Installation von Python nicht Teil von CFLAGS sein soll (gh-65320).

Insbesondere sollte CFLAGS nicht enthalten:

  • das Compiler-Flag -I (das den Suchpfad für Include-Dateien setzt). Die -I-Flags werden von links nach rechts verarbeitet, Flags in CFLAGS hä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 install an die Befehlszeile von compileall ü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.c kompiliert wird.

Added in version 3.7.

CCSHARED

Compiler-Flags zum Bauen einer gemeinsam genutzten Bibliothek.

Unter Linux und BSD wird zum Beispiel -fPIC verwendet.

CFLAGSFORSHARED

Zusätzliche C-Flags, die beim Bauen der Objektdateien des Interpreters hinzugefügt werden.

Vorgabe: $(CCSHARED), wenn --enable-shared verwendet 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 python und _testembed gebaut werden.

Vorgabe: $(PURIFY) $(CC).

CONFIGURE_LDFLAGS

Wert der Variablen LDFLAGS, der an das Skript ./configure übergeben wird.

Vermeide es, CFLAGS, LDFLAGS und 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_NODIST wird genauso verwendet wie CFLAGS_NODIST. Verwende es, wenn ein Linker-Flag nach der Installation von Python nicht Teil von LDFLAGS sein soll (gh-65320).

Insbesondere sollte LDFLAGS nicht enthalten:

  • das Compiler-Flag -L (das den Suchpfad für Bibliotheken setzt). Die -L-Flags werden von links nach rechts verarbeitet, Flags in LDFLAGS hä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 CPPFLAGS als auch LDFLAGS mü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