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

apiabiversion.md

103 строк · 5.3 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3/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/c-api/apiabiversion.html#c.Py_Version) для версии, используемой во **время выполнения**.1213См. [Стабильность C API](https://python-all.ru/3/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_SERIAL`3233`2` в `3.4.1a2`. Ноль для финальных релизов.3435#### `PY_VERSION_HEX`3637Номер версии Python, закодированный как одно целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования.3839Используйте это для числовых сравнений, например, `#if PY_VERSION_HEX >= ...`.4041Эти макросы определены в [Include/patchlevel.h](https://python-all.ru/src/3.14/Include/patchlevel.h).4243## Версия времени выполнения4445#### `const unsigned long Py_Version`4647*Часть [Stable ABI](https://python-all.ru/3/c-api/stable.html#stable) начиная с версии 3.11.*4849Номер версии среды выполнения Python, закодированный как одно константное целое число. См. [`Py_PACK_FULL_VERSION()`](https://python-all.ru/3/c-api/apiabiversion.html#c.Py_PACK_FULL_VERSION) для подробностей кодирования. Он содержит версию Python, используемую во время выполнения.5051Используйте это для числовых сравнений, например, `if (Py_Version >= ...)`.5253Добавлено в версии 3.12.5455## Макросы битовой упаковки5657#### `uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)`5859*Часть [Stable ABI](https://python-all.ru/3/c-api/stable.html#stable) начиная с версии 3.14.*6061Возвращает указанную версию, закодированную как одно 32-битное целое число со следующей структурой:6263| Аргумент | Кол-во бит | Битовая маска | Битовый сдвиг | Примеры значений |  |64| --- | --- | --- | --- | --- | --- |65| `3.4.1a2` | `3.10.0` |  |  |  |  |66| *major* | 8 | `0xFF000000` | 24 | `0x03` | `0x03` |67| *minor* | 8 | `0x00FF0000` | 16 | `0x04` | `0x0A` |68| *micro* | 8 | `0x0000FF00` | 8 | `0x01` | `0x00` |69| *release\_level* | 4 | `0x000000F0` | 4 | `0xA` | `0xF` |70| *release\_serial* | 4 | `0x0000000F` | 0 | `0x2` | `0x0` |7172Например:7374| Версия | `Py_PACK_FULL_VERSION` аргументы | Кодированная версия |75| --- | --- | --- |76| `3.4.1a2` | `(3, 4, 1, 0xA, 2)` | `0x030401a2` |77| `3.10.0` | `(3, 10, 0, 0xF, 0)` | `0x030a00f0` |7879Биты аргументов, выходящие за диапазон, игнорируются. То есть макрос можно определить так:8081```c82#ifndef Py_PACK_FULL_VERSION83#define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \84   (((X) & 0xff) << 24) |                              \85   (((Y) & 0xff) << 16) |                              \86   (((Z) & 0xff) << 8) |                               \87   (((LEVEL) & 0xf) << 4) |                            \88   (((SERIAL) & 0xf) << 0))89#endif90```9192`Py_PACK_FULL_VERSION` – это в первую очередь макрос, предназначенный для использования в `#if` директивах, но также доступен как экспортируемая функция.9394Добавлено в версии 3.14.9596#### `uint32_t Py_PACK_VERSION(int major, int minor)`9798*Часть [Stable ABI](https://python-all.ru/3/c-api/stable.html#stable) начиная с версии 3.14.*99100Эквивалентно `Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)`. Результат не соответствует ни одному релизу Python, но полезен в числовых сравнениях.101102Добавлено в версии 3.14.103