Pengelolaan Versi API dan ABI

Konstanta versi build-time

CPython memperlihatkan nomor versinya dalam makro berikut ini. Perhatikan bahwa ini sesuai dengan kode versi yang dibangun. Lihat Py_Version untuk versi yang digunakan pada saat run time.

Lihat Stabilitas API C untuk diskusi tentang stabilitas API dan ABI di seluruh versi.

PY_MAJOR_VERSION

3 di 3.4.1a2.

PY_MINOR_VERSION

4 di 3.4.1a2.

PY_MICRO_VERSION

1 di 3.4.1a2.

PY_RELEASE_LEVEL

a di 3.4.1a2. Ini bisa berupa 0xA untuk versi alfa, 0xB untuk versi beta, 0xC untuk kandidat rilis atau 0xF untuk versi final.

PY_RELEASE_SERIAL

2 di 3.4.1a2. Nol untuk rilis final.

PY_VERSION_HEX

Nomor versi Python dikodekan dalam sebuah bilangan bulat. Lihat Py_PACK_FULL_VERSION() untuk mengetahui detail pengodean.

Gunakan ini untuk perbandingan numerik, misalnya, #if PY_VERSION_HEX >= ....

Versi run-time

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

Nomor versi runtime Python yang dikodekan dalam sebuah bilangan bulat konstan. Lihat Py_PACK_FULL_VERSION() untuk detail pengodean. Ini berisi versi Python yang digunakan pada saat dijalankan.

Gunakan ini untuk perbandingan numerik, misalnya, if (Py_Version >= ...).

Added in version 3.11.

Makro pengemasan bit

uint32_t Py_PACK_FULL_VERSION(int major, int minor, int micro, int release_level, int release_serial)
Part of the Stable ABI since version 3.14.

Mengembalikan versi yang diberikan, dikodekan sebagai bilangan bulat 32-bit tunggal dengan struktur berikut:

Argumen

Jumlah bit

Topeng bit

Pergeseran bit

Contoh nilai

3.4.1a2

3.10.0

major

8

0xFF000000

24

0x03

0x03

minor

8

0x00FF0000

16

0x04

0x0A

mikro

8

0x0000FF00

8

0x01

0x00

release_level

4

0x000000F0

4

0xA

0xF

release_serial

4

0x0000000F

0

0x2

0x0

Sebagai contoh:

Versi

argumen Py_PACK_FULL_VERSION

Versi yang dikodekan

3.4.1a2

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

0x030401a2

3.10.0

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

0x030a00f0

Bit yang berada di luar jangkauan dalam argumen akan diabaikan. Artinya, makro dapat didefinisikan sebagai:

#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 pada dasarnya adalah makro, yang dimaksudkan untuk digunakan dalam arahan #if, tetapi juga tersedia sebagai fungsi yang diekspor.

Added in version 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
Part of the Stable ABI since version 3.14.

Setara dengan Py_PACK_FULL_VERSION(major, minor, 0, 0, 0). Hasilnya tidak terikat dengan rilis Python apa pun, tetapi berguna dalam perbandingan numerik.

Added in version 3.14.