Этот вопрос касается того, как определить версию интерпретатора Python, используемую для выполнения модуля расширения, из модуля расширения (т. Е. Написанного на C).Как получить версию текущего Python-интерпретатора из модуля расширения Python?
В качестве фона, прямо внутри модуля расширения Python, можно получить версию Python, против которой было скомпилировано расширение. Вы можете просто использовать один из macros defined in patchlevel.h
, который включен при включении стандартного заголовка Python Python.h
(например, макроса PY_VERSION
).
Мой вопрос в том, можно ли в рамках модуля расширения получить во время выполнения версию интерпретатора , который в настоящее время используется для запуска расширения. Например, если Python 2.5 случайно используется для запуска модуля расширения, скомпилированного с Python 2.7, я бы хотел иметь возможность обнаружить это во время выполнения из модуля расширения. Для конкретности предположим, что модуль расширения скомпилирован с Python 2.7.
Помимо выполнения C-эквивалента проверки 'sys.version' (или просто запускаемого кода Python, который делает это)? – delnan
Да, это должно быть только с C, хотя, если есть способ гарантировать, что какой-то чистый код Python будет выполняться при импорте расширения, это может также работать, но не так идеально. – cjerdonek
Я не вижу проблемы: код C запускается при импорте расширения, и указанный C-код должен иметь возможность использовать весь API-интерфейс CPython. Но Martijn Pieters дал более многообещающий ответ. – delnan