2013-11-26 4 views
2

이 질문은 확장 모듈 (즉, C로 작성된 모듈) 내에서 확장 모듈을 실행하는 데 사용되는 Python 해석기의 버전을 감지하는 방법에 관한 것입니다.Python 확장 모듈에서 현재 실행중인 Python 인터프리터의 버전을 얻으려면 어떻게해야합니까?

배경 지식으로 파이썬 확장 모듈 내부에서 확장이 컴파일 된 파이썬 버전을 얻는 것은 간단합니다. 표준 파이썬 헤더 Python.h (예 : 매크로 PY_VERSION)을 포함 할 때 포함되는 macros defined in patchlevel.h 중 하나를 사용할 수 있습니다.

내 질문은 확장 모듈 내에서 확장 프로그램을 실행하는 데 현재 사용중인 인터프리터 버전 을 런타임에 가져올 수 있는지 여부입니다. 예를 들어, Python 2.5가 실수로 Python 2.7에 대해 컴파일 된 확장 모듈을 실행하는 데 사용 되었다면 확장 모듈 내에서 런타임에이를 감지 할 수 있기를 바랍니다. 구체성을 위해 확장 모듈이 Python 2.7에 대해 컴파일되었다고 가정 해 봅시다.

+0

'sys.version'을 검사하는 것과 동등한 조치 (또는 그렇게하는 Python 코드를 실행하는 것)가 필요합니까? – delnan

+0

그렇습니다. C에서 온 것입니다. 그러나 특정 순수 Python 코드가 확장을 가져올 때마다 실행되도록 보장 할 수있는 방법이 있으면 작동 할 수도 있지만 덜 바람직합니다. – cjerdonek

+0

문제가 보이지 않습니다. 확장을 가져올 때 C 코드가 실행되고 C 코드가 전체 CPython API를 사용할 수 있어야합니다. 그러나 Martijn Pieters는 어쨌든 더 유망한 대답을했습니다. – delnan

답변

2

사용 Py_GetVersion() API :

반환이 파이썬 인터프리터의 버전. 이것은 다음과 같은 문자열입니다.

"1.5 (#67, Dec 31 1997, 22:34:28) [GCC 2.7.2.2]" 

첫 번째 단어 (첫 번째 공백 문자까지)는 현재 파이썬 버전입니다. 처음 세 문자는 마침표로 구분 된 주 버전과 부 버전입니다. 반환 된 문자열은 정적 저장소를 가리 킵니다. 호출자는 값을 수정해서는 안됩니다. 이 값은 파이썬 코드에서 sys.version으로 사용할 수 있습니다.