API- und ABI-Versionierung

Build-Zeit-Versionskonstanten

CPython stellt seine Versionsnummer in den folgenden Makros bereit. Beachten Sie, dass diese der Version entsprechen, mit der der Code **erstellt** wird. Informationen zur **Laufzeitversion** finden Sie unter Py_Version.

Eine Diskussion über die API- und ABI-Stabilität über Versionen hinweg finden Sie unter C API-Stabilität.

PY_MAJOR_VERSION

Die 3 in 3.4.1a2.

PY_MINOR_VERSION

Die 4 in 3.4.1a2.

PY_MICRO_VERSION

Die 1 in 3.4.1a2.

PY_RELEASE_LEVEL

Das a in 3.4.1a2. Dies kann 0xA für Alpha, 0xB für Beta, 0xC für Release Candidate oder 0xF für Final sein.

PY_RELEASE_SERIAL

Die 2 in 3.4.1a2. Null für finale Releases.

PY_VERSION_HEX

Die Python-Versionsnummer, kodiert in einer einzigen Ganzzahl. Einzelheiten zur Kodierung finden Sie unter Py_PACK_FULL_VERSION().

Verwenden Sie dies für numerische Vergleiche, z. B. #if PY_VERSION_HEX >= ....

Laufzeitversion

const unsigned long Py_Version
Teil des Stable ABI seit Version 3.11.

Die Python-Laufzeitversionsnummer, kodiert als eine einzige konstante Ganzzahl. Einzelheiten zur Kodierung finden Sie unter Py_PACK_FULL_VERSION(). Dies enthält die zur Laufzeit verwendete Python-Version.

Verwenden Sie dies für numerische Vergleiche, z. B. if (Py_Version >= ...).

Hinzugefügt 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 des Stable ABI seit Version 3.14.

Gibt die angegebene Version zurück, kodiert als eine einzige 32-Bit-Ganzzahl mit folgender Struktur

Argument

Anzahl der Bits

Bitmaske

Bitverschiebung

Beispielwerte

3.4.1a2

3.10.0

major

8

0xFF000000

24

0x03

0x03

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

Außerhalb des Bereichs liegende Bits in den Argumenten 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, aber es ist auch als exportierte Funktion verfügbar.

Hinzugefügt in Version 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
Teil des Stable ABI seit Version 3.14.

Äquivalent zu Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Das Ergebnis entspricht keiner Python-Version, ist aber für numerische Vergleiche nützlich.

Hinzugefügt in Version 3.14.