3. Python konfigurieren¶
3.1. Voraussetzungen für den Build¶
Um CPython zu bauen, brauchst du:
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.
Geändert in Version 3.5: Unter Windows wird jetzt Visual Studio 2015 oder neuer benötigt.
Geändert in Version 3.6: Ausgewählte C99-Funktionen wie <stdint.h> und static inline-Funktionen werden jetzt benötigt.
Geändert in Version 3.7: Thread-Unterstützung wird jetzt benötigt.
Geändert in Version 3.11: Ein C11-Compiler sowie Unterstützung für IEEE 754 und NaN werden jetzt benötigt. Unter Windows wird Visual Studio 2017 oder neuer benötigt.
Siehe auch PEP 7 „Style Guide for C Code“ und PEP 11 „CPython platform support“.
3.1.1. Voraussetzungen für optionale Module¶
Einige optionale Module der Standardbibliothek setzen voraus, dass Bibliotheken von Dritten für die Entwicklung installiert sind (zum Beispiel müssen Headerdateien verfügbar sein).
Fehlende Voraussetzungen werden in der Ausgabe von configure gemeldet. Module, die wegen fehlender Abhängigkeiten nicht gebaut werden, stehen am Ende der Ausgabe von make, manchmal unter einem internen Namen, etwa _ctypes für das Modul ctypes.
Wenn du einen CPython-Interpreter ohne die optionalen Module weitergibst, ist es gute Praxis, die Benutzer darauf hinzuweisen — sie erwarten im Allgemeinen, dass die Module der Standardbibliothek verfügbar sind.
Die Abhängigkeiten zum Bauen der optionalen Module sind:
Abhängigkeit |
Mindestversion |
Python-Modul |
|---|---|---|
3.3.0 empfohlen |
||
2.5.0 |
||
libreadline oder libedit [2] |
||
|
||
3.15.2 |
||
8.5.12 |
||
1.2.2.1 |
||
1.4.5 |
Beachte, dass die Tabelle nicht alle optionalen Module enthält. Insbesondere plattformspezifische Module wie winreg sind hier nicht aufgeführt.
Siehe auch
Der devguide enthält eine vollständige Liste der Abhängigkeiten, die zum Bauen aller Module nötig sind, sowie Anleitungen, wie du sie auf den verbreiteten Plattformen installierst.
--with-system-expaterlaubt das Bauen mit einer externen Bibliothek libexpat.
Geändert in Version 3.1: Für tkinter wird jetzt Tcl/Tk in Version 8.3.1 benötigt.
Geändert in Version 3.5: Für tkinter wird jetzt Tcl/Tk in Version 8.4 benötigt.
Geändert in Version 3.10: Für hashlib und ssl wird jetzt OpenSSL 1.1.1 benötigt. Für sqlite3 wird jetzt SQLite 3.7.15 benötigt.
Geändert in Version 3.11: Für tkinter wird jetzt Tcl/Tk in Version 8.5.12 benötigt.
Geändert in Version 3.13: Für sqlite3 wird jetzt SQLite 3.15.2 benötigt.
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
Die erzeugten Dateien können sich je nach den genauen Versionen der verwendeten Werkzeuge unterscheiden. Der von CPython verwendete Container enthält Autoconf 2.72, aclocal aus Automake 1.16.5 und pkg-config 1.8.1.
Geändert in Version 3.13: Zum Neuerzeugen von configure werden jetzt Autoconf 2.71 und aclocal 1.16.5 verwendet.
Geändert in Version 3.14: Zum Neuerzeugen von configure wird jetzt Autoconf 2.72 verwendet.
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.
Define
PYLONG_BITS_IN_DIGITto15or30.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.
- --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.
- --with-missing-stdlib-config=FILE¶
Pfad zu einer JSON-Konfigurationsdatei mit eigenen Fehlermeldungen für fehlende Module der Standardbibliothek.
Diese Option ist für Python-Distributoren gedacht, die distributionsspezifische Hinweise geben möchten, wenn Benutzer auf Module der Standardbibliothek stoßen, die fehlen oder getrennt paketiert sind.
Die JSON-Datei sollte Namen fehlender Module auf eigene Fehlermeldungen abbilden. Wenn deine Distribution zum Beispiel
tkinterund_tkintergetrennt paketiert und_gdbmaus rechtlichen Gründen ausschließt, könnte die Konfiguration Folgendes enthalten:{ "_gdbm": "The '_gdbm' module is not available in this distribution", "tkinter": "Install the python-tk package to use tkinter", "_tkinter": "Install the python-tk package to use tkinter", }
Added in version 3.15.
- --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¶
Schaltet die Unterstützung dafür ein, Python ohne den global interpreter lock (GIL) zu betreiben: free-threaded 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]¶
Gibt an, wie der experimentelle Just-in-time-Compiler eingebunden wird.
no: Baut den JIT nicht.yes: Schaltet den JIT ein. Um ihn zur Laufzeit abzuschalten, setze die UmgebungsvariablePYTHON_JIT=0.yes-off: Baut den JIT, schaltet ihn aber standardmäßig ab. Um ihn zur Laufzeit einzuschalten, setze die UmgebungsvariablePYTHON_JIT=1.interpreter: Schaltet den „JIT-Interpreter“ ein (nur nützlich für die Fehlersuche am JIT selbst). Um ihn zur Laufzeit abzuschalten, setze die UmgebungsvariablePYTHON_JIT=0.
--enable-experimental-jit=noist das Standardverhalten, wenn die Option nicht angegeben wird, und--enable-experimental-jitist die Kurzform für--enable-experimental-jit=yes. Mehr dazu steht inTools/jit/README.md, auch wie du die nötigen Abhängigkeiten für die Bauzeit installierst.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.
- --disable-epoll¶
Baut ohne
epoll, das heißt,select.epoll()ist nicht vorhanden, selbst wenn das System eine Funktion epoll_create bereitstellt. Das lässt sich auf Systemen verwenden, auf denen epoll_create oder epoll_create1 verfügbar, aber mit der Linux-Semantik nicht verträglich ist.Added in version 3.15.
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.
- 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.
- LIBZSTD_CFLAGS¶
- LIBZSTD_LIBS¶
C-Compiler- und Linker-Flags für
libzstd, verwendet vom Modulcompression.zstd, überschreibtpkg-config.Added in version 3.14.
- 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¶
- --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).
- --with-tail-call-interp¶
Schaltet Interpreter mit Tail Calls in CPython ein. Wenn eingeschaltet, wird dringend empfohlen, auch PGO einzuschalten (
--enable-optimizations). Diese Option setzt insbesondere einen C-Compiler mit richtiger Tail-Call-Unterstützung und der Aufrufkonvention preserve_none voraus. Clang 19 und neuer unterstützt das zum Beispiel.Added in version 3.14.
- --without-frame-pointers¶
Schaltet Frame-Pointer ab, die standardmäßig eingeschaltet sind (siehe PEP 831).
Standardmäßig hängt der Build Flags zum Erzeugen von Frame- oder Backchain-Pointern an
BASECFLAGSan:-fno-omit-frame-pointerund/oder-mno-omit-leaf-frame-pointerwerden hinzugefügt, wenn der Compiler sie unterstützt.-marmund/oder-mno-thumbwird auf 32-Bit-ARM hinzugefügt, sofern unterstützt,auf s390x-Plattformen wird, sofern unterstützt, stattdessen
-mbackchainanstelle der obigen Frame-Pointer-Flags hinzugefügt.auf ppc64le-Plattformen sind keine Compiler-Flags nötig, weil das Power-ABI verlangt, dass Compiler standardmäßig eine Backchain führen.
Frame-Pointer erlauben es Profilern, Debuggern und Werkzeugen zur Systemverfolgung (
perf,eBPF,dtrace,gdb), den C-Aufrufstapel ohne DWARF-Metadaten abzulaufen. Die Flags werden übersysconfigan C-Erweiterungen von Dritten weitergegeben. Auf Compilern, die sie nicht kennen, überspringt der Build sie stillschweigend.Nachgelagerte Paketierer und Autoren nativer Bibliotheken, die mit eigenen Bausystemen gebaut werden, sollten dieselben Flags setzen, damit die Unwind-Kette über alle nativen Frames hinweg nicht reißt.
Added in version 3.15.
- --without-mimalloc¶
Schaltet den schnellen Allokator mimalloc ab (standardmäßig eingeschaltet).
Diese Option lässt sich nicht zusammen mit
--disable-gilverwenden, weil der free-threaded Build mimalloc benötigt.Siehe auch die Umgebungsvariable
PYTHONMALLOC.
- --without-pymalloc¶
Schaltet den spezialisierten Python-Speicherallokator pymalloc ab (standardmäßig eingeschaltet).
Siehe auch die Umgebungsvariable
PYTHONMALLOC.
- --with-pymalloc-hugepages¶
Schaltet die Unterstützung großer Speicherseiten für die Arenen von pymalloc ein (standardmäßig abgeschaltet). Wenn eingeschaltet, wächst die Arenengröße auf 64-Bit-Plattformen auf 2 MiB, und die Arenen werden mit
MAP_HUGETLB(Linux) beziehungsweiseMEM_LARGE_PAGES(Windows) belegt, mit automatischem Rückfall auf gewöhnliche Seiten.Selbst wenn mit dieser Option kompiliert wurde, werden große Speicherseiten zur Laufzeit nicht verwendet, solange die Umgebungsvariable
PYTHON_PYMALLOC_HUGEPAGESnicht auf1gesetzt ist. Diese ausdrückliche Zustimmung ist nötig, weil große Speicherseitenunter Linux Risiken tragen: Ist der Vorrat an großen Speicherseiten erschöpft, liefern Seitenfehler (auch Copy-on-Write-Fehler nach
os.fork()) einSIGBUSund beenden den Prozess.unter Windows ein besonderes Recht brauchen. Einzelheiten stehen in der Windows-Dokumentation zu großen Speicherseiten. Python schlägt beim Start fehl, wenn der Benutzer das nötige Recht SeLockMemoryPrivilege nicht besitzt.
Das Skript configure prüft, ob die Plattform
MAP_HUGETLBunterstützt, und gibt eine Warnung aus, wenn es nicht verfügbar ist.Verwende unter Windows das Flag
--pymalloc-hugepagesmitbuild.batoder setze die MSBuild-EigenschaftUsePymallocHugepages.Added in version 3.15.
- --without-doc-strings¶
Schaltet statische Dokumentationszeichenketten ab, um den Speicherbedarf zu verringern (standardmäßig eingeschaltet). In Python definierte Dokumentationszeichenketten sind davon nicht betroffen.
Don’t define the
WITH_DOC_STRINGSmacro.-
WITH_DOC_STRINGS¶
Define this macro to include static documentation strings in the build. It is defined by default, unless
--without-doc-stringsis used.
Siehe das Makro
PyDoc_STRVAR().-
WITH_DOC_STRINGS¶
- --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).
- --without-remote-debug¶
Schaltet die in PEP 768 beschriebene Unterstützung für Fernfehlersuche ab (standardmäßig eingeschaltet). Ist dieses Flag angegeben, wird der Code nicht kompiliert, der es dem Interpreter erlaubt, die Ausführung einer Python-Datei in einem getrennten Prozess anzustoßen, wie in PEP 768 beschrieben. Das betrifft sowohl die Möglichkeit, Code zur Ausführung einzuplanen, als auch die, Code zur Ausführung zu empfangen.
-
Py_REMOTE_DEBUG¶
Dieses Makro ist standardmäßig definiert, sofern Python nicht mit
--without-remote-debugkonfiguriert wurde.Beachte, dass die Fernfehlersuche auch bei definiertem Makro möglicherweise nicht verfügbar ist, etwa auf einer unverträglichen Plattform.
Added in version 3.14.
-
Py_REMOTE_DEBUG¶
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).MSan reports false positives for memory initialized by libraries that are not built with MSan, so either build all dependencies with MSan or disable the extension modules that use them in
Modules/Setup.local.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.
- --enable-static-libpython-for-interpreter¶
Linkt die Binärdatei des Python-Interpreters (
python3) nicht gegen die gemeinsam genutzte Python-Bibliothek, sondern statisch gegenlibpython, als wäre--enable-sharednicht verwendet worden — baut die gemeinsam genutztelibpythonaber weiterhin (zur Verwendung durch andere Programme).Diese Option bewirkt nichts, wenn
--enable-sharednicht verwendet wird.Standardmäßig wird (bei Verwendung von
-enable-shared) der Python-Interpreter gegen die gebaute gemeinsam genutzte Bibliothek gelinkt.Added in version 3.15.
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.Geändert in Version 3.15: Eine beiliegende Kopie der Bibliothek wird nicht mehr stillschweigend gewählt, wenn keine installierte
mpdecimal-Bibliothek gefunden wird. Nur in Python 3.15 lässt sie sich noch ausdrücklich mit--with-system-libmpdec=nooder--without-system-libmpdecauswählen.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.
- --disable-safety¶
Schaltet Compiler-Optionen ab, die die OpenSSF aus Sicherheitsgründen empfiehlt (siehe recommended by OpenSSF) und die keine Leistungseinbuße mit sich bringen. Ist diese Option nicht eingeschaltet, wird CPython mit sicherheitsrelevanten Compiler-Optionen gebaut, die es nicht verlangsamen. Ist sie eingeschaltet, wird CPython ohne die unten aufgeführten Compiler-Optionen gebaut.
Mit
--disable-safetywerden die folgenden Compiler-Optionen abgeschaltet:-fstack-protector-strong: Schaltet Laufzeitprüfungen auf Pufferüberläufe im Stapel ein.
-Wtrampolines: Schaltet Warnungen über Trampoline ein, die ausführbare Stapel benötigen.
Added in version 3.14.
- --enable-slower-safety¶
Schaltet Compiler-Optionen ein, die die OpenSSF aus Sicherheitsgründen empfiehlt (siehe recommended by OpenSSF) und die Mehraufwand verursachen. Ist diese Option nicht eingeschaltet, wird CPython ohne die sicherheitsrelevanten Compiler-Optionen gebaut, die die Leistung beeinträchtigen. Ist sie eingeschaltet, wird CPython mit den unten aufgeführten Compiler-Optionen gebaut.
Mit
--enable-slower-safetywerden die folgenden Compiler-Optionen eingeschaltet:-D_FORTIFY_SOURCE=3: Härtet die Quellen mit Prüfungen zur Übersetzungs- und Laufzeit gegen unsichere Verwendung der libc und gegen Pufferüberläufe.
Added in version 3.14.
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 Platforms/Apple/iOS/README.md.
- --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(gewählt, wenn die Zielplattform aufwasm32-wasi*oderwasm32-emscriptenpasst)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. [7]
3.4.3.6. make install¶
Baut das Ziel all und installiert Python.
3.4.3.7. make test¶
Baut das Ziel all und führt die Python-Testsammlung mit der Option --fast-ci ohne die GUI-Tests aus. Variablen:
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 ci¶
Entspricht make test, verwendet aber -ugui, um auch die GUI-Tests auszuführen.
Added in version 3.14.
3.4.3.9. 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.10. 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.
- CFLAGS_CEVAL¶
Flags, mit denen
Python/ceval.ckompiliert wird.Added in version 3.14.5.
- 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.Verwende bitte
EXE_LDFLAGS, wenn die angegebenen Linker-Flags nur für ausführbare Dateien gelten, etwa das Flag-pievon GCC.
- 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.
- EXE_LDFLAGS¶
Linker-Flags, mit denen ausführbare Ziele wie der Interpreter gebaut werden. Wenn angegeben, wird
PY_CORE_EXE_LDFLAGSanstelle vonPY_CORE_LDFLAGSverwendet.Added in version 3.15.
- CONFIGURE_EXE_LDFLAGS¶
Wert der Variablen
EXE_LDFLAGS, der an das Skript./configureübergeben wird.Added in version 3.15.
- PY_CORE_EXE_LDFLAGS¶
Linker-Flags, mit denen der Interpreter und die ausführbaren Ziele gebaut werden.
Vorgabe:
$(PY_CORE_LDFLAGS)Added in version 3.15.
Fußnoten
git clean -fdx ist eine noch radikalere Art, deinen Checkout „aufzuräumen“. Es entfernt alle Dateien, die Git nicht kennt. Bei der Fehlersuche mit git bisect ist das zwischen den Proben empfohlen, um einen vollständig sauberen Build zu garantieren. Mit Vorsicht verwenden, denn es löscht alle Dateien, die nicht in Git eingecheckt sind, auch deine neue, nicht committete Arbeit.