API와 ABI 버전 붙이기¶
빌드 타임 버전 상수¶
CPython은 다음 매크로에서 버전 번호를 노출합니다. 이 매크로들은 코드가 빌드 될 때 사용된 버전에 대응한다는 점에 유의하십시오. 런타임 에 사용되는 버전은 Py_Version 을 참조하십시오.
버전에 따른 API 및 ABI 안정성에 관한 논의는 C API 및 ABI 안정성 을 참조하십시오.
-
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. 알파는0xA, 베타는0xB, 배포 후보는0xC, 최종은0xF가 될 수 있습니다.완전성을 위해, 해당 값들은 다음과 같은 매크로로 사용할 수 있습니다:
PY_RELEASE_LEVEL_ALPHA(0xA),PY_RELEASE_LEVEL_BETA(0xB),PY_RELEASE_LEVEL_GAMMA(0xC), 그리고PY_RELEASE_LEVEL_FINAL(0xF).
-
PY_RELEASE_SERIAL¶
3.4.1a2의2. 최종 배포는 0.
-
PY_VERSION_HEX¶
단일 정수로 인코딩된 파이썬 버전 번호입니다. 인코딩에 대한 자세한 내용은
Py_PACK_FULL_VERSION()을 참조하십시오.이것은 숫자 비교 시 사용하며, 예를 들어
#if PY_VERSION_HEX >= ...와 같이 사용할 수 있습니다.
-
PY_VERSION¶
문자열 형태의 파이썬 버전입니다. 예:
"3.4.1a2".
이 매크로들은 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 이후로.
다음 구조를 가진 단일 32비트 정수로 인코딩된 주어진 버전을 반환합니다.
인수
비트 수
비트 마스크
비트 시프트
예시 값
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.