17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci.. _apiabiversion:
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci***********************
67db96d56Sopenharmony_ciAPI and ABI Versioning
77db96d56Sopenharmony_ci***********************
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciCPython exposes its version number in the following macros.
107db96d56Sopenharmony_ciNote that these correspond to the version code is **built** with,
117db96d56Sopenharmony_cinot necessarily the version used at **run time**.
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciSee :ref:`stable` for a discussion of API and ABI stability across versions.
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci.. c:macro:: PY_MAJOR_VERSION
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci   The ``3`` in ``3.4.1a2``.
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ci.. c:macro:: PY_MINOR_VERSION
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci   The ``4`` in ``3.4.1a2``.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci.. c:macro:: PY_MICRO_VERSION
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci   The ``1`` in ``3.4.1a2``.
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ci.. c:macro:: PY_RELEASE_LEVEL
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ci   The ``a`` in ``3.4.1a2``.
307db96d56Sopenharmony_ci   This can be ``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for release
317db96d56Sopenharmony_ci   candidate or ``0xF`` for final.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci.. c:macro:: PY_RELEASE_SERIAL
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci   The ``2`` in ``3.4.1a2``. Zero for final releases.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci.. c:macro:: PY_VERSION_HEX
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci   The Python version number encoded in a single integer.
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci   The underlying version information can be found by treating it as a 32 bit
427db96d56Sopenharmony_ci   number in the following manner:
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci   +-------+-------------------------+-------------------------+--------------------------+
457db96d56Sopenharmony_ci   | Bytes | Bits (big endian order) | Meaning                 | Value for ``3.4.1a2``    |
467db96d56Sopenharmony_ci   +=======+=========================+=========================+==========================+
477db96d56Sopenharmony_ci   |   1   |         1-8             |  ``PY_MAJOR_VERSION``   | ``0x03``                 |
487db96d56Sopenharmony_ci   +-------+-------------------------+-------------------------+--------------------------+
497db96d56Sopenharmony_ci   |   2   |         9-16            |  ``PY_MINOR_VERSION``   | ``0x04``                 |
507db96d56Sopenharmony_ci   +-------+-------------------------+-------------------------+--------------------------+
517db96d56Sopenharmony_ci   |   3   |         17-24           |  ``PY_MICRO_VERSION``   | ``0x01``                 |
527db96d56Sopenharmony_ci   +-------+-------------------------+-------------------------+--------------------------+
537db96d56Sopenharmony_ci   |   4   |         25-28           |  ``PY_RELEASE_LEVEL``   | ``0xA``                  |
547db96d56Sopenharmony_ci   +       +-------------------------+-------------------------+--------------------------+
557db96d56Sopenharmony_ci   |       |         29-32           |  ``PY_RELEASE_SERIAL``  | ``0x2``                  |
567db96d56Sopenharmony_ci   +-------+-------------------------+-------------------------+--------------------------+
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   Thus ``3.4.1a2`` is hexversion ``0x030401a2`` and ``3.10.0`` is
597db96d56Sopenharmony_ci   hexversion ``0x030a00f0``.
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   Use this for numeric comparisons, e.g. ``#if PY_VERSION_HEX >= ...``.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   This version is also available via the symbol :data:`Py_Version`.
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci.. c:var:: const unsigned long Py_Version
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci   The Python runtime version number encoded in a single constant integer, with
687db96d56Sopenharmony_ci   the same format as the :c:macro:`PY_VERSION_HEX` macro.
697db96d56Sopenharmony_ci   This contains the Python version used at run time.
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci   .. versionadded:: 3.11
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ciAll the given macros are defined in :source:`Include/patchlevel.h`.
74