Phiên bản API và ABI

Hằng số phiên bản tại thời điểm xây dựng

CPython hiển thị số phiên bản của nó trong các macro sau. Lưu ý rằng những mã này tương ứng với mã phiên bản là built. Xem Py_Version để biết phiên bản được sử dụng tại run time.

Xem C API Tính ổn định để biết thảo luận về độ ổn định của API và ABI trên các phiên bản.

PY_MAJOR_VERSION

Zz000zz trong 3.4.1a2.

PY_MINOR_VERSION

Zz000zz trong 3.4.1a2.

PY_MICRO_VERSION

Zz000zz trong 3.4.1a2.

PY_RELEASE_LEVEL

Zz000zz trong 3.4.1a2. Đây có thể là 0xA cho bản alpha, 0xB cho bản beta, 0xC cho ứng cử viên phát hành hoặc 0xF cho bản cuối cùng.

PY_RELEASE_SERIAL

Zz000zz trong 3.4.1a2. Zero cho bản phát hành cuối cùng.

PY_VERSION_HEX

Số phiên bản Python được mã hóa dưới dạng một số nguyên duy nhất. Xem Py_PACK_FULL_VERSION() để biết chi tiết mã hóa.

Sử dụng điều này để so sánh số, ví dụ: #if PY_VERSION_HEX >= ....

Các macro này được xác định trong Include/patchlevel.h.

Phiên bản thời gian chạy

const unsigned long Py_Version
Một phần của ABI ổn định kể từ phiên bản 3.11.

Số phiên bản thời gian chạy Python được mã hóa bằng một số nguyên không đổi. Xem Py_PACK_FULL_VERSION() để biết chi tiết mã hóa. Phiên bản này chứa phiên bản Python được sử dụng trong thời gian chạy.

Sử dụng điều này để so sánh số, ví dụ: if (Py_Version >= ...).

Added in version 3.11.

Macro đóng gói bit

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
Một phần của ABI ổn định kể từ phiên bản 3.14.

Trả về phiên bản đã cho, được mã hóa dưới dạng một số nguyên 32 bit với cấu trúc sau:

Lý lẽ

Số bit

Mặt nạ bit

Dịch chuyển bit

Giá trị mẫu

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

Ví dụ:

Phiên bản

đối số Py_PACK_FULL_VERSION

Phiên bản được mã hóa

3.4.1a2

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

0x030401a2

3.10.0

(3, 10, 0, 0xF, 0)

0x030a00f0

Các bit ngoài phạm vi trong các đối số sẽ bị bỏ qua. Tức là, macro có thể được định nghĩa là:

#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 chủ yếu là macro, được thiết kế để sử dụng trong các lệnh #if, nhưng nó cũng có sẵn dưới dạng hàm xuất.

Added in version 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
Một phần của ABI ổn định kể từ phiên bản 3.14.

Tương đương với Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Kết quả không tương ứng với bất kỳ bản phát hành Python nào, nhưng rất hữu ích trong việc so sánh số.

Added in version 3.14.