3. Python konfigurieren¶
3.1. Voraussetzungen für den Build¶
Features required to build CPython:
Einen C11-Compiler. Optionale C11-Funktionen werden nicht benötigt.
Unterstützung für Gleitkommazahlen nach IEEE 754 sowie für Not-a-Number (NaN) bei Gleitkommazahlen.
Unterstützung für Threads.
Unter Windows wird Microsoft Visual Studio 2017 oder neuer benötigt.
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
_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 the
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.
- --without-freelists¶
Disable all freelists except the empty tuple singleton.
Added in version 3.11.
- --with-platlibdir=DIRNAME¶
Name des Verzeichnisses der Python-Bibliothek (Vorgabe ist
lib).Fedora und SuSE verwenden auf 64-Bit-Plattformen
lib64.Siehe
sys.platlibdir.Added in version 3.9.
- --with-wheel-pkg-dir=PATH¶
Verzeichnis der Wheel-Pakete, die das Modul
ensurepipverwendet (standardmäßig keines).Die Paketierungsrichtlinien einiger Linux-Distributionen empfehlen, Abhängigkeiten nicht beizulegen. Fedora installiert Wheel-Pakete zum Beispiel im Verzeichnis
/usr/share/python-wheels/und installiert das Paketensurepip._bundlednicht.Added in version 3.10.
- --with-pkg-config=[check|yes|no]¶
Ob configure pkg-config verwenden soll, um die Abhängigkeiten für den Build zu erkennen.
check(Vorgabe): pkg-config ist optionalyes: pkg-config ist zwingendno: configure verwendet pkg-config nicht, selbst wenn es vorhanden ist
Added in version 3.11.
- --enable-pystats¶
Turn on internal statistics gathering.
The statistics will be dumped to a arbitrary (probably unique) file in
/tmp/py_stats/, orC:\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.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.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_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.
- --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.
- --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_STRINGSmacro.Siehe das Makro
PyDoc_STRVAR().
- --enable-profiling¶
Schaltet die Profilierung von Code auf C-Ebene mit
gprofein (standardmäßig abgeschaltet).
- --with-strict-overflow¶
Fügt
-fstrict-overflowzu den Flags des C-Compilers hinzu (standardmäßig fügen wir stattdessen-fno-strict-overflowhinzu).
3.3.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
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 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:
Definiert das Makro
Py_TRACE_REFS.Fügt die Funktion
sys.getobjects()hinzu.Fügt die Umgebungsvariable
PYTHONDUMPREFShinzu.
This build is not ABI compatible with release build (default build) or debug build (
Py_DEBUGandPy_REF_DEBUGmacros).Added in version 3.8.
- --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¶
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¶
Schaltet das Bauen einer gemeinsam genutzten Python-Bibliothek ein:
libpython(Vorgabe ist nein).
- --without-static-libpython¶
Baut
libpythonMAJOR.MINOR.anicht und installiertpython.onicht (wird standardmäßig gebaut und eingeschaltet).Added in version 3.10.
3.3.8. 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¶
Build the
_decimalextension module using an installedmpdeclibrary, see thedecimalmodule (default is no).Added in version 3.3.
- --with-readline=editline¶
Use
editlinelibrary for backend of thereadlinemodule.Define the
WITH_EDITLINEmacro.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.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:
siphash13kam hinzu und ist die neue Vorgabe.
- --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2¶
Integrierte Hash-Module:
md5;sha1;sha256;sha512;sha3(mit shake);blake2.
Added in version 3.9.
- --with-ssl-default-suites=[python|openssl|STRING]¶
Überschreibt die Zeichenkette der Standard-Cipher-Suites von OpenSSL:
python(Vorgabe): verwendet die von Python bevorzugte Auswahl;openssl: lässt die Vorgaben von OpenSSL unangetastet;STRING: verwendet eine eigene Zeichenkette
Siehe das Modul
ssl.Added in version 3.7.
Geändert in Version 3.10: Die Einstellungen
pythonund STRING setzen zusätzlich TLS 1.2 als niedrigste Protokollversion.
3.3.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-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).
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-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
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¶
make: Build Python with the standard library.make platform:: build thepythonprogram, 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-optimizationsoption to make this the default target of themakecommand (make allor justmake).make buildbottest: Build Python and run the Python test suite, the same way than buildbots test Python. SetTESTTIMEOUTvariable (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-namesandautoconfmust be run separately for the remaining generated files.make clean: Remove built files.make distclean: Same thanmake 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, wennPy_BUILD_CORE_MODULEdefiniert istVerwendet andernfalls
Py_IMPORTED_SYMBOL.
Wird das Makro Py_BUILD_CORE_BUILTIN versehentlich bei einer C-Erweiterung verwendet, die als gemeinsam genutzte Bibliothek gebaut wird, wird deren Funktion PyInit_xxx() nicht exportiert, was beim Import einen ImportError auslöst.
3.5. Compiler- und Linker-Flags¶
Optionen, die das Skript ./configure und Umgebungsvariablen setzen und die das Makefile verwendet.
3.5.1. Flags des Präprozessors¶
- CONFIGURE_CPPFLAGS¶
Wert der Variablen
CPPFLAGS, der an das Skript./configureübergeben wird.Added in version 3.6.
- CPPFLAGS¶
Flags des (Objective-)C/C++-Präprozessors, etwa
-Iinclude_dir, wenn deine Headerdateien in einem nicht standardmäßigen Verzeichnis include_dir liegen.Sowohl
CPPFLAGSals auchLDFLAGSmüssen den Wert aus der Shell enthalten, damit sich Erweiterungsmodule mit den in den Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.
- BASECPPFLAGS¶
Added in version 3.4.
- PY_CPPFLAGS¶
Zusätzliche Präprozessor-Flags, die beim Bauen der Objektdateien des Interpreters hinzugefügt werden.
Vorgabe:
$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS).Added in version 3.2.
3.5.2. Compiler-Flags¶
- CC¶
Befehl des C-Compilers.
Beispiel:
gcc -pthread.
- CXX¶
Befehl des C++-Compilers.
Beispiel:
g++ -pthread.
- CFLAGS¶
Flags des C-Compilers.
- CFLAGS_NODIST¶
CFLAGS_NODISTdient dem Bauen des Interpreters und der C-Erweiterungen der Standardbibliothek. Verwende es, wenn ein Compiler-Flag nach der Installation von Python nicht Teil vonCFLAGSsein soll (gh-65320).Insbesondere sollte
CFLAGSnicht enthalten:das Compiler-Flag
-I(das den Suchpfad für Include-Dateien setzt). Die-I-Flags werden von links nach rechts verarbeitet, Flags inCFLAGShätten daher Vorrang vor-I-Flags, die Benutzer oder Pakete mitgeben.Härtungsflags wie
-Werror, weil Distributionen nicht steuern können, ob von Benutzern installierte Pakete solchen verschärften Maßstäben entsprechen.
Added in version 3.5.
- COMPILEALL_OPTS¶
Optionen, die beim Erzeugen der PYC-Dateien in
make installan die Befehlszeile voncompileallübergeben werden. Vorgabe:-j0.Added in version 3.12.
- EXTRA_CFLAGS¶
Zusätzliche Flags für den C-Compiler.
- CONFIGURE_CFLAGS¶
Wert der Variablen
CFLAGS, der an das Skript./configureübergeben wird.Added in version 3.2.
- CONFIGURE_CFLAGS_NODIST¶
Wert der Variablen
CFLAGS_NODIST, der an das Skript./configureübergeben wird.Added in version 3.5.
- BASECFLAGS¶
Grundlegende Compiler-Flags.
- OPT¶
Optimierungsflags.
- CFLAGS_ALIASING¶
Flags für strenges oder nicht strenges Aliasing, mit denen
Python/dtoa.ckompiliert wird.Added in version 3.7.
- CCSHARED¶
Compiler-Flags zum Bauen einer gemeinsam genutzten Bibliothek.
Unter Linux und BSD wird zum Beispiel
-fPICverwendet.
- CFLAGSFORSHARED¶
Zusätzliche C-Flags, die beim Bauen der Objektdateien des Interpreters hinzugefügt werden.
Vorgabe:
$(CCSHARED), wenn--enable-sharedverwendet wird, andernfalls eine leere Zeichenkette.
- PY_CFLAGS¶
Vorgabe:
$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS).
- PY_CFLAGS_NODIST¶
Vorgabe:
$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST) -I$(srcdir)/Include/internal.Added in version 3.5.
- PY_STDMODULE_CFLAGS¶
C-Flags, mit denen die Objektdateien des Interpreters gebaut werden.
Vorgabe:
$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED).Added in version 3.7.
- PY_CORE_CFLAGS¶
Vorgabe:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE.Added in version 3.2.
- PY_BUILTIN_MODULE_CFLAGS¶
Compiler-Flags, um ein Erweiterungsmodul der Standardbibliothek als integriertes Modul zu bauen, etwa das Modul
posix.Vorgabe:
$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN.Added in version 3.8.
- PURIFY¶
Befehl für Purify. Purify ist ein Programm zur Speicherfehlersuche.
Vorgabe: leere Zeichenkette (nicht verwendet).
3.5.3. Linker-Flags¶
- LINKCC¶
Linker-Befehl, mit dem Programme wie
pythonund_testembedgebaut werden.Vorgabe:
$(PURIFY) $(CC).
- CONFIGURE_LDFLAGS¶
Wert der Variablen
LDFLAGS, der an das Skript./configureübergeben wird.Vermeide es,
CFLAGS,LDFLAGSund so weiter zuzuweisen, damit Benutzer sie auf der Befehlszeile verwenden können, um etwas an diese Werte anzuhängen, ohne die vorbelegten Werte zu zertreten.Added in version 3.2.
- LDFLAGS_NODIST¶
LDFLAGS_NODISTwird genauso verwendet wieCFLAGS_NODIST. Verwende es, wenn ein Linker-Flag nach der Installation von Python nicht Teil vonLDFLAGSsein soll (gh-65320).Insbesondere sollte
LDFLAGSnicht enthalten:das Compiler-Flag
-L(das den Suchpfad für Bibliotheken setzt). Die-L-Flags werden von links nach rechts verarbeitet, Flags inLDFLAGShätten daher Vorrang vor-L-Flags, die Benutzer oder Pakete mitgeben.
- CONFIGURE_LDFLAGS_NODIST¶
Wert der Variablen
LDFLAGS_NODIST, der an das Skript./configureübergeben wird.Added in version 3.8.
- LDFLAGS¶
Linker-Flags, etwa
-Llib_dir, wenn deine Bibliotheken in einem nicht standardmäßigen Verzeichnis lib_dir liegen.Sowohl
CPPFLAGSals auchLDFLAGSmüssen den Wert aus der Shell enthalten, damit sich Erweiterungsmodule mit den in den Umgebungsvariablen angegebenen Verzeichnissen bauen lassen.
- LIBS¶
Linker-Flags, um dem Linker beim Linken der ausführbaren Python-Datei Bibliotheken zu übergeben.
Beispiel:
-lrt.
- LDSHARED¶
Befehl zum Bauen einer gemeinsam genutzten Bibliothek.
Vorgabe:
@LDSHARED@ $(PY_LDFLAGS).
- BLDSHARED¶
Befehl zum Bauen der gemeinsam genutzten Bibliothek
libpython.Vorgabe:
@BLDSHARED@ $(PY_CORE_LDFLAGS).
- PY_LDFLAGS¶
Vorgabe:
$(CONFIGURE_LDFLAGS) $(LDFLAGS).
- PY_LDFLAGS_NODIST¶
Vorgabe:
$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST).Added in version 3.8.
- PY_CORE_LDFLAGS¶
Linker-Flags, mit denen die Objektdateien des Interpreters gebaut werden.
Added in version 3.8.