3. Python konfigurieren

3.1. Voraussetzungen für den Build

Features required to build CPython:

Geändert in Version 3.5: On Windows, Visual Studio 2015 or later is 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.

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

List all ./configure script options using:

./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.

Define the PYLONG_BITS_IN_DIGIT to 15 or 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

Turn on internal statistics gathering.

The statistics will be dumped to a arbitrary (probably unique) file in /tmp/py_stats/, or C:\temp\py_stats\ on Windows. If that directory does not exist, results will be printed on stdout.

Zum Lesen der Daten verwende Tools/scripts/summarize_stats.py.

Added in version 3.11.

3.3.2. 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.3. 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.4. 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.

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

--with-computed-gotos

Schaltet berechnete gotos in der Auswertungsschleife ein (auf unterstützten Compilern standardmäßig eingeschaltet).

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

Don’t define the WITH_DOC_STRINGS macro.

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.5. 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 and debug builds are now ABI compatible: defining the Py_DEBUG macro no longer implies the Py_TRACE_REFS macro (see the --with-trace-refs option), which introduces the only ABI incompatibility.

3.3.6. 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:

This build is not ABI compatible with release build (default build) or debug build (Py_DEBUG and Py_REF_DEBUG macros).

Added in version 3.8.

--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

Enable AddressSanitizer memory error detector, asan (default is no).

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.

3.3.7. 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.8. 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

Build the _decimal extension module using an installed mpdec library, see the decimal module (default is no).

Added in version 3.3.

--with-readline=editline

Use editline library for backend of the readline module.

Define the WITH_EDITLINE macro.

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.9. 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.10. macOS-Optionen

See 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).

3.3.11. 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

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

  • make: Build Python with the standard library.

  • make platform:: build the python program, but don’t build the standard library extension modules.

  • make profile-opt: build Python using Profile Guided Optimization (PGO). You can use the configure --enable-optimizations option to make this the default target of the make command (make all or just make).

  • make buildbottest: Build Python and run the Python test suite, the same way than buildbots test Python. Set TESTTIMEOUT variable (in seconds) to change the test timeout (1200 by default: 20 minutes).

  • make install: Build and install Python.

  • make regen-all: Regenerate (almost) all generated files; make regen-stdlib-module-names and autoconf must be run separately for the remaining generated files.

  • make clean: Remove built files.

  • make distclean: Same than make clean, but remove also files created by the configure script.

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.