2013-11-26 7 views
2

Этот вопрос касается того, как определить версию интерпретатора 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.

+0

Помимо выполнения C-эквивалента проверки 'sys.version' (или просто запускаемого кода Python, который делает это)? – delnan

+0

Да, это должно быть только с C, хотя, если есть способ гарантировать, что какой-то чистый код Python будет выполняться при импорте расширения, это может также работать, но не так идеально. – cjerdonek

+0

Я не вижу проблемы: код C запускается при импорте расширения, и указанный C-код должен иметь возможность использовать весь API-интерфейс CPython. Но Martijn Pieters дал более многообещающий ответ. – delnan

ответ

2

Используйте Py_GetVersion() API:

Верните версия интерпретатора Python. Это строка, которая выглядит как-то

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

Первое слово (до первого символа пробела) является текущей версией Python; первые три символа являются основной и второстепенной версией, разделенной периодом. Возвращенная строка указывает на статическое хранилище; вызывающий абонент не должен изменять его значение. Значение доступно для кода Python как sys.version.

Смежные вопросы