Документация Python неофициальный перевод
Содержание страницы

Версионирование API и ABIAPI and ABI Versioning

Константы версии времени сборкиBuild-time version constants

CPython предоставляет номер версии в следующих макросах. Обратите внимание, что они соответствуют версии, с которой код собран. См. Py_Version для версии, используемой во время выполнения.

См. Стабильность C API для обсуждения стабильности API и ABI в разных версиях.

PY_MAJOR_VERSION

3 в 3.4.1a2.

PY_MINOR_VERSION

4 в 3.4.1a2.

PY_MICRO_VERSION

1 в 3.4.1a2.

PY_RELEASE_LEVEL

a в 3.4.1a2. Может быть 0xA для альфа, 0xB для бета, 0xC для кандидата релиза или 0xF для финальной.

PY_RELEASE_SERIAL

2 в 3.4.1a2. Ноль для финальных релизов.

PY_VERSION_HEX

Номер версии Python, закодированный как одно целое число. См. Py_PACK_FULL_VERSION() для подробностей кодирования.

Используйте это для числовых сравнений, например, #if PY_VERSION_HEX >= ....

Эти макросы определены в Include/patchlevel.h.

Версия времени выполненияRun-time version

const unsigned long Py_Version
Часть Stable ABI начиная с версии 3.11.

Номер версии среды выполнения Python, закодированный как одно константное целое число. См. Py_PACK_FULL_VERSION() для подробностей кодирования. Он содержит версию Python, используемую во время выполнения.

Используйте это для числовых сравнений, например, if (Py_Version >= ...).

Добавлено в версии 3.12.

Макросы битовой упаковкиBit-packing macros

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
Часть Stable ABI начиная с версии 3.14.

Возвращает указанную версию, закодированную как одно 32-битное целое число со следующей структурой:

Аргумент

Кол-во бит

Битовая маска

Битовый сдвиг

Примеры значений

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

Например:

Версия

Py_PACK_FULL_VERSION аргументы

Кодированная версия

3.4.1a2

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

0x030401a2

3.10.0

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

0x030a00f0

Биты аргументов, выходящие за диапазон, игнорируются. То есть макрос можно определить так:

#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 – это в первую очередь макрос, предназначенный для использования в #if директивах, но также доступен как экспортируемая функция.

Добавлено в версии 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
Часть Stable ABI начиная с версии 3.14.

Эквивалентно Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Результат не соответствует ни одному релизу Python, но полезен в числовых сравнениях.

Добавлено в версии 3.14.