API 和 ABI 版本控制

構建時版本常量

CPython 在以下宏中暴露其版本號。請注意,這些對應於程式碼**構建**時使用的版本。有關**執行時**使用的版本,請參閱 Py_Version

有關跨版本 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。這可以是表示 alpha 的 0xA,表示 beta 的 0xB,表示候選釋出版的 0xC 或表示最終版的 0xF

PY_RELEASE_SERIAL

3.4.1a2 中的 2。最終釋出版為零。

PY_VERSION_HEX

Python 版本號編碼為單個整數。有關編碼詳情,請參閱 Py_PACK_FULL_VERSION()

用於數字比較,例如 #if PY_VERSION_HEX >= ...

執行時版本

const unsigned long Py_Version
自 3.11 版起成為 穩定 ABI 的一部分。

Python 執行時版本號編碼為單個常量整數。有關編碼詳情,請參閱 Py_PACK_FULL_VERSION()。這包含執行時使用的 Python 版本。

用於數字比較,例如 if (Py_Version >= ...)

在 3.11 版本中新增。

位封裝宏

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

返回給定版本,編碼為單個 32 位整數,結構如下:

引數

位數

位掩碼

位移

示例值

3.4.1a2

3.10.0

major

8

0xFF000000

24

0x03

0x03

minor

8

0x00FF0000

16

0x04

0x0A

micro

8

0x0000FF00

8

0x01

0x00

release_level

4

0x000000F0

4

0xA

0xF

release_serial

4

0x0000000F

0

0x2

0x0

例如:

版本

Py_PACK_FULL_VERSION 引數

編碼版本

3.4.1a2

(3, 4, 1, 0xA, 2)

0x030401a2

3.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 指令,但它也可以作為匯出的函式使用。

在 3.14 版本加入。

uint32_t Py_PACK_VERSION(int major, int minor)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

等同於 Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)。結果不對應任何 Python 版本,但對於數字比較很有用。

在 3.14 版本加入。