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 3 unter 3.4.1a2.

PY_MINOR_VERSION

Die 4 unter 3.4.1a2.

PY_MICRO_VERSION

Die 1 unter 3.4.1a2.

PY_RELEASE_LEVEL

Die a unter 3.4.1a2. Dies kann 0xA für die Alpha-Version, 0xB für die Beta-Version, 0xC für den Release Candidate oder 0xF für die finale Version sein.

PY_RELEASE_SERIAL

Die 2 unter 3.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.1a2

3.10.0

Hauptversion (major)

8

0xFF000000

24

0x03

0x03

Nebenversion (minor)

8

0x00FF0000

16

0x04

0x0A

micro

8

0x0000FF00

8

0x01

0x00

release_level

4

0x000000F0

4

0xA

0xF

release_serial

4

0x0000000F

0

0x2

0x0

Zum Beispiel:

Version

Py_PACK_FULL_VERSION Argumente

Kodierte Version

3.4.1a2

(3, 4, 1, 0xA, 2)

0x030401a2

3.10.0

(3, 10, 0, 0xF, 0)

0x030a00f0

Bits 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_VERSION ist 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.