apiabiversion.md
1> **Источник:** https://python-all.ru/3.16/c-api/apiabiversion.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Версионирование API и ABI89## Константы версии времени сборки1011CPython предоставляет номер версии в следующих макросах. Обратите внимание, что они соответствуют версии, с которой код **собран**. См. [`Py_Version`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_Version) для версии, используемой во **время выполнения**.1213См. [Стабильность C API и ABI](https://python-all.ru/3.16/c-api/stable.html#stable) для обсуждения стабильности API и ABI в разных версиях.1415#### `PY_MAJOR_VERSION`1617`3` в `3.4.1a2`.1819#### `PY_MINOR_VERSION`2021`4` в `3.4.1a2`.2223#### `PY_MICRO_VERSION`2425`1` в `3.4.1a2`.2627#### `PY_RELEASE_LEVEL`2829`a` в `3.4.1a2`. Может быть `0xA` для альфа, `0xB` для бета, `0xC` для кандидата релиза или `0xF` для финальной.3031Для полноты, значения доступны как макросы: `PY_RELEASE_LEVEL_ALPHA` (`0xA`), `PY_RELEASE_LEVEL_BETA` (`0xB`), `PY_RELEASE_LEVEL_GAMMA` (`0xC`) и `PY_RELEASE_LEVEL_FINAL` (`0xF`).3233#### `PY_RELEASE_SERIAL`3435`2` в `3.4.1a2`. Ноль для финальных релизов.3637#### `PY_VERSION_HEX`3839Номер версии Python, закодированный как одно целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования.4041Используйте это для числовых сравнений, например, `#if PY_VERSION_HEX >= ...`.4243#### `PY_VERSION`4445Версия Python в виде строки, например, `"3.4.1a2"`.4647Эти макросы определены в [Include/patchlevel.h](https://python-all.ru/src/main/Include/patchlevel.h).4849## Версия времени выполнения5051#### `const unsigned long Py_Version`5253*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable) начиная с версии 3.11.*5455Номер версии среды выполнения Python, закодированный как одно константное целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3.16/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования. Он содержит версию Python, используемую во время выполнения.5657Используйте это для числовых сравнений, например, `if (Py_Version >= ...)`.5859Добавлено в версии 3.12.6061## Макросы битовой упаковки6263#### `uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)`6465*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable) начиная с версии 3.14.*6667Возвращает указанную версию, закодированную как одно 32-битное целое число со следующей структурой:6869| Аргумент | Кол-во бит | Битовая маска | Битовый сдвиг | Примеры значений | |70| --- | --- | --- | --- | --- | --- |71| `3.4.1a2` | `3.10.0` | | | | |72| *major* | 8 | `0xFF000000` | 24 | `0x03` | `0x03` |73| *minor* | 8 | `0x00FF0000` | 16 | `0x04` | `0x0A` |74| *micro* | 8 | `0x0000FF00` | 8 | `0x01` | `0x00` |75| *release\_level* | 4 | `0x000000F0` | 4 | `0xA` | `0xF` |76| *release\_serial* | 4 | `0x0000000F` | 0 | `0x2` | `0x0` |7778Например:7980| Версия | `Py_PACK_FULL_VERSION` аргументы | Кодированная версия |81| --- | --- | --- |82| `3.4.1a2` | `(3, 4, 1, 0xA, 2)` | `0x030401a2` |83| `3.10.0` | `(3, 10, 0, 0xF, 0)` | `0x030a00f0` |8485Биты аргументов, выходящие за диапазон, игнорируются. То есть макрос можно определить так:8687```c88#ifndef Py_PACK_FULL_VERSION89#define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \90 (((X) & 0xff) << 24) | \91 (((Y) & 0xff) << 16) | \92 (((Z) & 0xff) << 8) | \93 (((LEVEL) & 0xf) << 4) | \94 (((SERIAL) & 0xf) << 0))95#endif96```9798`Py_PACK_FULL_VERSION` – это в первую очередь макрос, предназначенный для использования в `#if` директивах, но также доступен как экспортируемая функция.99100Добавлено в версии 3.14.101102#### `uint32_t Py_PACK_VERSION(int major, int minor)`103104*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable) начиная с версии 3.14.*105106Эквивалентно `Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)`. Результат не соответствует ни одному релизу Python, но полезен в числовых сравнениях.107108Добавлено в версии 3.14.109