Versionering av API och ABI

Konstanter för byggtidsversion

CPython avslöjar sitt versionsnummer i följande makron. Observera att dessa motsvarar den version som koden är byggd med. Se Py_Version för den version som används vid körning.

Se C API-stabilitet för en diskussion om API- och ABI-stabilitet mellan olika versioner.

PY_MAJOR_VERSION

”3” i ”3.4.1a2”.

PY_MINOR_VERSION

”4” i ”3.4.1a2”.

PY_MICRO_VERSION

Den 1 i 3.4.1a2.

PY_RELEASE_LEVEL

”A” i ”3.4.1a2”. Detta kan vara 0xA för alpha, 0xB för beta, 0xC för release candidate eller 0xF för final.

PY_RELEASE_SERIAL

”2” i ”3.4.1a2”. Noll för slutliga utgåvor.

PY_VERSION_HEX

Pythons versionsnummer kodat i ett enda heltal. Se Py_PACK_FULL_VERSION() för detaljer om kodning.

Använd detta för numeriska jämförelser, till exempel #if PY_VERSION_HEX >= ....

Version för drifttid

const unsigned long Py_Version
En del av Stabil ABI sedan version 3.11.

Pythons versionsnummer för körtid kodat i ett enda konstant heltal. Se Py_PACK_FULL_VERSION() för detaljer om kodningen. Detta innehåller den Python-version som används vid körning.

Använd detta för numeriska jämförelser, till exempel if (Py_Version >= ...).

Tillagd i version 3.11.

Makron för bit-packning

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
En del av Stabil ABI sedan version 3.14.

Returnerar den angivna versionen, kodad som ett 32-bitars heltal med följande struktur:

Argument

Antal bitar

Bitmask

Bitskift

Exempel på värden

3.4.1a2

3.10.0

major

8

0xFF000000

24

0x03

0x03

mindre

8

0x00FF0000

16

0x04

0x0A

mikro

8

0x0000FF00

8

0x01

0x00

release_level

4

0x000000F0

4

0xA

0xF

release_serial

4

0x0000000F

0

0x2

0x0

Till exempel:

Version

argument för Py_PACK_FULL_VERSION

Kodad version

3.4.1a2

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

0x030401a2

3.10.0

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

0x030a00f0

Bitar utanför intervallet i argumenten ignoreras. Det vill säga, makrot kan definieras som:

#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 är i första hand ett makro, avsett att användas i #if -direktiv, men det finns också som en exporterad funktion.

Tillagd i version 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
En del av Stabil ABI sedan version 3.14.

Motsvarar Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Resultatet motsvarar inte någon Python-version, men är användbart vid numeriska jämförelser.

Tillagd i version 3.14.