API と ABI のバージョニング¶
ビルド時のバージョン定数¶
CPython は以下のマクロでバージョン番号を公開しています。
これらはコードの ビルド時 のバージョンに対応します。
実行時 のバージョンについては Py_Version を参照してください。
バージョン間の API と ABI の安定性については C API と ABI の安定性 を参照してください。
-
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_LEVEL_ALPHA(0xA)、PY_RELEASE_LEVEL_BETA(0xB)、PY_RELEASE_LEVEL_GAMMA(0xC)、PY_RELEASE_LEVEL_FINAL(0xF) です。
-
PY_RELEASE_SERIAL¶
3.4.1a2の2。最終リリースでは 0 になります。
-
PY_VERSION_HEX¶
Python のバージョン番号を一つの整数にエンコードした値です。 エンコードの詳細は
Py_PACK_FULL_VERSION()を参照してください。#if PY_VERSION_HEX >= ...のように、数値として比較するときに使います。
-
PY_VERSION¶
Python のバージョンを表す文字列です。 例えば
"3.4.1a2"です。
これらのマクロは Include/patchlevel.h で定義されています。
実行時のバージョン¶
-
const unsigned long Py_Version¶
- 次に属します: Stable ABI (バージョン 3.11 より).
Python ランタイムのバージョン番号を一つの整数定数にエンコードした値です。 エンコードの詳細は
Py_PACK_FULL_VERSION()を参照してください。 実行時に使われている Python のバージョンを表します。if (Py_Version >= ...)のように、数値として比較するときに使います。Added in version 3.11.
ビットを詰め合わせるマクロ¶
-
uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)¶
- 次に属します: Stable ABI (バージョン 3.14 より).
指定されたバージョンを、以下の構造を持つ一つの 32 ビット整数にエンコードして返します。
引数
ビット数
ビットマスク
ビットシフト
値の例
3.4.1a23.10.0major
8
0xFF00000024
0x030x03minor
8
0x00FF000016
0x040x0Amicro
8
0x0000FF008
0x010x00release_level
4
0x000000F04
0xA0xFrelease_serial
4
0x0000000F0
0x20x0例えば:
バージョン
Py_PACK_FULL_VERSIONの引数エンコードされたバージョン
3.4.1a2(3, 4, 1, 0xA, 2)0x030401a23.10.0(3, 10, 0, 0xF, 0)0x030a00f0引数の範囲外のビットは無視します。 つまり、このマクロは次のように定義できます。
#ifndef Py_PACK_FULL_VERSION #define Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \ (((X) & 0xff) << 24) | \ (((Y) & 0xff) << 16) | \ (((Z) & 0xff) << 8) | \ (((LEVEL) & 0xf) << 4) | \ (((SERIAL) & 0xf) << 0)) #endif
Py_PACK_FULL_VERSIONは主に#ifディレクティブで使うためのマクロですが、エクスポートされた関数としても利用できます。Added in version 3.14.
-
uint32_t Py_PACK_VERSION(int major, int minor)¶
- 次に属します: Stable ABI (バージョン 3.14 より).
Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)と同等です。 結果は実際の Python リリースには対応しませんが、数値による比較に便利です。Added in version 3.14.