Python 3.6.5 Documentation >  API and ABI Versioning

API and ABI Versioning
**********************

"PY_VERSION_HEX" is the Python version number encoded in a single
integer.

For example if the "PY_VERSION_HEX" is set to "0x030401a2", the
underlying version information can be found by treating it as a 32 bit
number in the following manner:

+---------+---------------------------+--------------------------------------------------+
| Bytes | Bits (big endian order) | Meaning |
+=========+===========================+==================================================+
| "1" | "1-8" | "PY_MAJOR_VERSION" (the "3" in "3.4.1a2") |
+---------+---------------------------+--------------------------------------------------+
| "2" | "9-16" | "PY_MINOR_VERSION" (the "4" in "3.4.1a2") |
+---------+---------------------------+--------------------------------------------------+
| "3" | "17-24" | "PY_MICRO_VERSION" (the "1" in "3.4.1a2") |
+---------+---------------------------+--------------------------------------------------+
| "4" | "25-28" | "PY_RELEASE_LEVEL" ("0xA" for alpha, "0xB" for |
| | | beta, "0xC" for release candidate and "0xF" for |
| | | final), in this case it is alpha. |
+---------+---------------------------+--------------------------------------------------+
| | "29-32" | "PY_RELEASE_SERIAL" (the "2" in "3.4.1a2", zero |
| | | for final releases) |
+---------+---------------------------+--------------------------------------------------+

Thus "3.4.1a2" is hexversion "0x030401a2".

All the given macros are defined in Include/patchlevel.h.