API- und ABI-Versionierung¶
Versionskonstanten zur Kompilierungszeit¶
CPython gibt seine Versionsnummer über die folgenden Makros bekannt. Beachte, dass diese dem Versionscode entsprechen, mit dem das Programm kompiliert wurde. Informationen zur Laufzeit verwendeten Version finden Sie unter Py_Version.
Eine Erörterung der API- und ABI-Stabilität über verschiedene Versionen hinweg findest du unter C API Stability.
-
PY_MAJOR_VERSION¶
Die
3unter3.4.1a2.
-
PY_MINOR_VERSION¶
Die
4unter3.4.1a2.
-
PY_MICRO_VERSION¶
Die
1unter3.4.1a2.
-
PY_RELEASE_LEVEL¶
Die
aunter3.4.1a2. Dies kann0xAfür die Alpha-Version,0xBfür die Beta-Version,0xCfür den Release Candidate oder0xFfür die finale Version sein.
-
PY_RELEASE_SERIAL¶
Die
2unter3.4.1a2. Keine für endgültige Veröffentlichungen.
-
PY_VERSION_HEX¶
Die Python-Versionsnummer, kodiert als einzelne Ganzzahl. Einzelheiten zur Kodierung findest du unter
Py_PACK_FULL_VERSION().Verwenden dies für numerische Vergleiche, zum Beispiel:
#if PY_VERSION_HEX >= ....
Diese Makros sind unter Include/patchlevel.h definiert.
Laufzeitversion¶
-
const unsigned long Py_Version¶
- Teil der Stable ABI seit Version 3.11.
Die Versionsnummer der Python-Laufzeitumgebung, kodiert als einzelne konstante Ganzzahl. Einzelheiten zur Kodierung findest du unter
Py_PACK_FULL_VERSION(). Diese enthält die zur Laufzeit verwendete Python-Version.Verwende dies für numerische Vergleiche, zum Beispiel:
if (Py_Version >= ...).Added in version 3.11.
Bit-Packing-Makros¶
-
uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)¶
- Teil der Stable ABI seit Version 3.14.
Gibt die angegebene Version zurück, kodiert als einzelne 32-Bit-Ganzzahl mit folgender Struktur:
Argument
Anzahl der Bits
Bitmaske
Bitverschiebung
Beispielwerte
3.4.1a23.10.0Hauptversion (major)
8
0xFF00000024
0x030x03Nebenversion (minor)
8
0x00FF000016
0x040x0Amicro
8
0x0000FF008
0x010x00release_level
4
0x000000F04
0xA0xFrelease_serial
4
0x0000000F0
0x20x0Zum Beispiel:
Version
Py_PACK_FULL_VERSIONArgumenteKodierte Version
3.4.1a2(3, 4, 1, 0xA, 2)0x030401a23.10.0(3, 10, 0, 0xF, 0)0x030a00f0Bits in den Argumenten, die außerhalb des zulässigen Bereichs liegen, werden ignoriert. Das heißt, das Makro kann wie folgt definiert werden:
#ifndef Py_PACK_FULL_VERSION #define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \ (((X) & 0xff) << 24) | \ (((Y) & 0xff) << 16) | \ (((Z) & 0xff) << 8) | \ (((LEVEL) & 0xf) << 4) | \ (((SERIAL) & 0xf) << 0)) #endif
Py_PACK_FULL_VERSIONist in erster Linie ein Makro, das für die Verwendung in#if-Direktiven vorgesehen ist, steht aber auch als exportierte Funktion zur Verfügung.Added in version 3.14.
-
uint32_t Py_PACK_VERSION(int major, int minor)¶
- Teil der Stable ABI seit Version 3.14.
Entspricht
Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Das Ergebnis entspricht keiner Python-Version, ist jedoch bei numerischen Vergleichen nützlich.Added in version 3.14.