# API と ABI のバージョニング

CPython は以下のマクロでバージョン番号を公開しています。これらはコードが ビルドされた バージョンに対応しており、必ずしも 実行時 に使われるバージョンではないことに注意してください。

バージョン間の API と ABI の安定性については C API の安定性 を参照してください。

PY_MAJOR_VERSION

  `3.4.1a2` の `3` 。

PY_MINOR_VERSION

  `3.4.1a2` の `4` 。

PY_MICRO_VERSION

  `3.4.1a2` の `1` 。

PY_RELEASE_LEVEL

  `3.4.1a2` の `a` 。アルファでは `0xA` 、ベータでは `0xB` 、リリース候補では `0xC` 、最終版では `0xF` となります。

PY_RELEASE_SERIAL

  `3.4.1a2` の `2` 。最終リリースでは 0 になります。

PY_VERSION_HEX

  Python のバージョン番号を単一の整数に符号化したものです。

  下記のように32ビットの値として扱うことで、バージョン情報を得ることができます:

  bytes | ビット (ビッグエンディアンオーダ) | 意味 | `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`

  したがって、 `3.4.1a2` は16進数で `0x030401a2` であり、 `3.10.0` は16進数で `0x030a00f0` です。

  これを数値比較に使用します。例えば、 `#if PY_VERSION_HEX >= ...` 。

  このバージョンはシンボル `Py_Version` からも入手できます。

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

  `PY_VERSION_HEX` マクロと同じ書式で、単一の定数整数でエンコードされた Python の実行時のバージョン番号です。これは実行時に使用される Python のバージョンを含んでいます。

  Added in version 3.11.

これらのマクロは Include/patchlevel.h で定義されています。