نسخهگذاری 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.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)¶
- قسمتی از ABI پایدار از نسخهی 3.14.
معادل
Py_PACK_FULL_VERSION(major, minor, 0, 0, 0)است. نتیجه با هیچ نسخهی انتشار یافتهای از پایتون مطابقت ندارد، اما در مقایسههای عددی مفید است.Added in version 3.14.