API i wersjonowanie ABI

Stałe wersji czasu budowania

CPython udostępnia swój numer wersji w poniższych makrach. Należy pamiętać, że odpowiadają one wersji, z użyciem której kod został zbudowany. Zobacz :Py_Version, aby sprawdzić wersję używaną w czasie działania.

Więcej informacji na temat stabilności API i ABI w różnych wersjach można znaleźć na stronie C API Stability.

PY_MAJOR_VERSION

3 w 3.4.1a2.

PY_MINOR_VERSION

4 w 3.4.1a2.

PY_MICRO_VERSION

1 w 3.4.1a2.

PY_RELEASE_LEVEL

a w 3.4.1a2. Może to być 0xA dla wersji alfa, 0xB dla wersji beta, 0xC dla wersji kandydującej do wydania lub 0xF dla wersji finalnej.

PY_RELEASE_SERIAL

2 w 3.4.1a2. Zero dla ostatecznych wydań.

PY_VERSION_HEX

Numer wersji Pythona zakodowany w pojedynczej liczbie całkowitej. Zobacz Py_PACK_FULL_VERSION(), aby poznać szczegóły kodowania.

Używaj to do porównań liczbowych, na przykład #if PY_VERSION_HEX >= ....

Te makra są zdefiniowane w Include/patchlevel.h

Wersja środowiska uruchomieniowego

const unsigned long Py_Version
Część stabilnego ABI od wersji 3.11.

Numer wersji środowiska uruchomieniowego Pythona zakodowany w pojedynczej stałej całkowitoliczbowej. Zobacz Py_PACK_FULL_VERSION(), aby poznać szczegóły kodowania. Zawiera ona wersję Pythona używaną w czasie działania.

Używaj to do porównań liczbowych, na przykład if (Py_Version >= ...).

Dodane w wersji 3.11.

Makra pakowania bitowego

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
Część stabilnego ABI od wersji 3.14.

Zwraca podaną wersję, zakodowaną jako pojedyncza 32-bitowa liczba całkowita o następującej strukturze:

Argument

Liczba bitów

Maska bitowa

Przesunięcie bitowe

Przykładowe wartości

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

Na przykład:

Wersja

Py_PACK_FULL_VERSION argumenty

Zakodowana wersja

3.4.1a2

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

0x030401a2

3.10.0

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

0x030a00f0

Bity spoza zakresu w argumentach są ignorowane. Oznacza to, że makro można zdefiniować następująco:

#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``to przede wszystkim makro, przeznaczone do użycia w dyrektywach ``#if, ale jest ono również dostępne jako wyeksportowana funkcja.

Dodane w wersji 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
Część stabilnego ABI od wersji 3.14.

Równoważne Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Wynik ten nie odpowiada żadnemu wydaniu Pythona, ale jest przydatny w porównaniach numerycznych.

Dodane w wersji 3.14.