API and ABI Versioning#

CPython exposes its version number in the following macros. Note that these correspond to the version code is built with, not necessarily the version used at run time.

See C API Stability for a discussion of API and ABI stability across versions.

PY_MAJOR_VERSION#

The 3 in 3.4.1a2.

PY_MINOR_VERSION#

The 4 in 3.4.1a2.

PY_MICRO_VERSION#

The 1 in 3.4.1a2.

PY_RELEASE_LEVEL#

The a in 3.4.1a2. This can be 0xA for alpha, 0xB for beta, 0xC for release candidate or 0xF for final.

PY_RELEASE_SERIAL#

The 2 in 3.4.1a2. Zero for final releases.

PY_VERSION_HEX#

The Python version number encoded in a single integer.

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

Value for 3.4.1a2

1

1-8

PY_MAJOR_VERSION

0x03

2

9-16

PY_MINOR_VERSION

0x04

3

17-24

PY_MICRO_VERSION

0x01

4

25-28

PY_RELEASE_LEVEL

0xA

29-32

PY_RELEASE_SERIAL

0x2

Thus 3.4.1a2 is hexversion 0x030401a2 and 3.10.0 is hexversion 0x030a00f0.

This version is also available via the symbol Py_Version.

const unsigned long Py_Version#
Part of the Stable ABI since version 3.11.

The Python runtime version number encoded in a single constant integer, with the same format as the PY_VERSION_HEX macro. This contains the Python version used at run time.

New in version 3.11.

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