> **Источник:** https://python-all.ru/3.15/c-api/apiabiversion.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Версионирование API и ABI

## Константы версии времени сборки

CPython предоставляет номер версии в следующих макросах. Обратите внимание, что они соответствуют версии, с которой код **собран**. См. [`Py_Version`](https://python-all.ru/3.15/c-api/apiabiversion.html#c.Py_Version) для версии, используемой во **время выполнения**.

См. [Стабильность C API и ABI](https://python-all.ru/3.15/c-api/stable.html#stable) для обсуждения стабильности 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_LEVEL_ALPHA` (`0xA`), `PY_RELEASE_LEVEL_BETA` (`0xB`), `PY_RELEASE_LEVEL_GAMMA` (`0xC`) и `PY_RELEASE_LEVEL_FINAL` (`0xF`).

#### `PY_RELEASE_SERIAL`

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

#### `PY_VERSION_HEX`

Номер версии Python, закодированный как одно целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3.15/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования.

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

#### `PY_VERSION`

Версия Python в виде строки, например, `"3.4.1a2"`.

Эти макросы определены в [Include/patchlevel.h](https://python-all.ru/src/3.15/Include/patchlevel.h).

## Версия времени выполнения

#### `const unsigned long Py_Version`

*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.11.*

Номер версии среды выполнения Python, закодированный как одно константное целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3.15/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования. Он содержит версию Python, используемую во время выполнения.

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

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

## Макросы битовой упаковки

#### `uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)`

*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 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` |

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

```c
#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](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.14.*

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

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