본문 바로가기
my_lesson/_Python

Python - C/C++ API Reference Manual Interface

by boolean 2019. 4. 19.
728x90

Stable Application Binary Interface

전통적으로 Python의 C API는 모든 릴리스마다 변경 될 것입니다. 대부분의 변경 사항은 기존 API를 변경하거나 API를 제거하지 않고 (일부 인터페이스는 먼저 사용 중지 된 후에 제거됨) 일반적으로 API 만 추가하여 소스와 호환됩니다.

 

아쉽게도 API 호환성은 ABI (이진 호환성)로 확장되지 않습니다. 그 이유는 기본적으로 구조체 정의가 진화 한 것이므로 새로운 필드를 추가하거나 필드의 유형을 변경하면 API가 손상되지는 않지만 ABI가 손상 될 수 있습니다. 결과적으로 확장 모듈은 파이썬 릴리스마다 다시 컴파일해야합니다 (영향을받는 인터페이스가 사용되지 않는 경우 유닉스에서 예외가 가능함). 또한 Windows에서 확장 모듈은 특정 pythonXY.dll과 연결되므로 최신 모듈과 링크하기 위해 다시 컴파일해야합니다.

 

Python 3.2부터 안정적인 ABI를 보장하기 위해 API의 일부가 선언되었습니다. 이 API를 사용하고자하는 확장 모듈 ( "제한된 API"라고 함)은 Py_LIMITED_API를 정의해야합니다. 인터프리터의 세부 정보는 확장 모듈에서 숨겨집니다. 대신에 재 컴파일없이 3.x 버전 (x> = 2)에서 작동하는 모듈이 빌드됩니다.

 

경우에 따라 안정적인 ABI를 새로운 기능으로 확장해야합니다. 이러한 새로운 API를 사용하고자하는 확장 모듈은 Py_LIMITED_API를 지원할 최소 Python 버전 (예 : Python 3.3의 경우 0x03030000)의 PY_VERSION_HEX 값 (API 및 ABI 버전 지정 참조)으로 설정해야합니다. 이러한 모듈은 모든 후속 Python 릴리스에서 작동하지만 이전 릴리스에서는로드되지 않습니다 (기호 누락).

 

Python 3.2부터는 제한된 API에서 사용할 수있는 기능 집합이 PEP 384에 문서화되어 있습니다. C API 문서에서 제한된 API의 일부가 아닌 API 요소는 "제한된 API의 일부가 아닙니다."로 표시됩니다.

'my_lesson > _Python' 카테고리의 다른 글

Python - Error Cheat sheets  (0) 2019.06.27
Python - Django  (0) 2019.06.19
Python - C/C++ API Reference Manual Introduction  (0) 2019.04.19
Python- C/C++ API Reference Manual Sequence  (0) 2019.04.19
Phyton - Django 설치 및 활용  (0) 2018.12.08

댓글