نسخه‌گذاری API و ABI

ثابتهای نسخه در زمان ساخت

CPython شماره‌ی نسخه‌ی خود را در ماکروهای زیر در معرض دید قرار می‌دهد. توجه داشته باشید که اینها مربوط به نسخه‌ای هستند که کد با آن ساخته (build) شده است. برای نسخه‌ای که در زمان اجرا (run time) استفاده می‌شود، به Py_Version مراجعه کنید.

برای بحث درباره‌ی پایداری API و ABI در میان نسخه‌ها، به C API Stability مراجعه کنید.

PY_MAJOR_VERSION

3 در 3.4.1a2.

PY_MINOR_VERSION

4 در 3.4.1a2.

PY_MICRO_VERSION

1 در 3.4.1a2.

PY_RELEASE_LEVEL

a در 3.4.1a2. این می‌تواند 0xA برای آلفا باشد، 0xB برای بتا، 0xC برای کاندیدای انتشار (release candidate) یا 0xF برای نهایی (final).

PY_RELEASE_SERIAL

2 در 3.4.1a2. برای انتشارهای نهایی، صفر است.

PY_VERSION_HEX

شماره‌ی نسخه‌ی پایتون که در یک عدد صحیح کدگذاری شده است. برای جزئیات کدگذاری، به Py_PACK_FULL_VERSION() مراجعه کنید.

از این (مقدار) برای مقایسه‌های عددی استفاده کنید، برای مثال، #if PY_VERSION_HEX >= ....

این ماکروها در Include/patchlevel.h تعریف می‌شوند.

نسخه‌ی زمان اجرا

const unsigned long Py_Version
قسمتی از ABI پایدار از نسخه‌ی 3.11.

شماره‌ی نسخه‌ی زمان اجرای پایتون که در یک عدد صحیح ثابت کدگذاری شده است. برای جزئیات کدگذاری، به Py_PACK_FULL_VERSION() مراجعه کنید. این (مقدار) شامل نسخه‌ی پایتون است که در زمان اجرا استفاده می‌شود.

از این (مقدار) برای مقایسه‌های عددی استفاده کنید، برای مثال، 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)
قسمتی از ABI پایدار از نسخه‌ی 3.14.

نسخه‌ی داده‌شده را که به صورت یک عدد صحیح ۳۲-بیتی با ساختار زیر کدگذاری شده است، برمی‌گرداند:

آرگومان

تعداد بیت‌ها

ماسک بیتی

شیفت بیتی

مقادیر نمونه

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 در نظر گرفته شده است، اما به‌عنوان یک تابع صادرشده نیز در دسترس است.

Added in version 3.14.

uint32_t Py_PACK_VERSION(int major, int minor)
قسمتی از ABI پایدار از نسخه‌ی 3.14.

معادل Py_PACK_FULL_VERSION(major, minor, 0, 0, 0) است. نتیجه با هیچ نسخه‌ی انتشار یافته‌ای از پایتون مطابقت ندارد، اما در مقایسه‌های عددی مفید است.

Added in version 3.14.