Как задается вопрос, я хочу быть уверенным, что скрипт выполняется определенной версией Python, скажем => 3.5.2.
Как я могу убедиться, что скрипт при выполнении вызывается конкретной версией.
Эту проверку следует выполнять в самом скрипте Python.
Было бы лучше, если бы решение было независимым от платформы.
@Sanyash Интересно, как можно перепометить как дубликат, если пропустили в первый раз.
@ayorgo Извините, я не знаю, может быть, вам следует спросить об этом в мета. Кстати, по моему опыту, ваш неправильный флаг обмана будет отмечен как полезный, и вопрос будет закрыт. Итак, вы можете просто отредактировать свой комментарий, как вы это сделали.
Честно говоря, Саняш смог лучше понять мой вопрос, и это правильная ссылка на вопрос.
Возможный дубликат Как заставить Shebang выбрать правильный интерпретатор Python между python3 и python3.5. См. также Есть ли причина не использовать /usr/bin/env python2/python3 явно?






Проверить версию можно по телефону sys.version_info. Это даст вам кортеж в форме sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0).
Я хочу быть уверен, что вызываемый python будет больше, чем предоставленная версия, а не проверять, установлен ли python 3.6.5, будет ли эта проверка выполнена этим?
Вы можете сравнить результат sys.version_info с тем, что хотите. sys.version_info предоставит вам информацию о том, какая версия Python запущена в данный момент.
например sys.version_info.major >= 3 and sys.version_info.minor >= 5 and sys.version_info.micro >= 2 (хотя это не совсем то логическое выражение, которое вам нужно, вам все равно нужно добавить проверки, например, для 3.6.1)
на самом деле ответ @ruohola имеет гораздо лучший способ их сравнения
Просто добавьте это в начало вашего скрипта:
import sys
assert sys.version_info >= (3, 5, 2), "Python version too low."
Или, если вы предпочитаете без assert:
import sys
if not sys.version_info >= (3, 5, 2):
raise EnvironmentError("Python version too low.")
Или немного более подробно, но это на самом деле сообщит пользователю, какая версия ему нужна:
import sys
MIN = (3, 5, 2)
if not sys.version_info >= MIN:
raise EnvironmentError(
"Python version too low, required at least {}".format('.'.join(str(n) for n in MIN)))
Example output:
Traceback (most recent call last): File "main.py", line 6, in <module> "Python version too low, required at least {}".format('.'.join(str(n) for n in MIN))) OSError: Python version too low, required at least 3.5.2
Указанный кортеж минимальной версии может быть сколь угодно точным. Все они действительны:
MIN = (3,)
MIN = (3, 5)
MIN = (3, 5, 2)
@brunns Да, совершенно верно, отредактировал другой способ сделать это.
Не идеальный тест. assert sys.version_info >= (3, 8) дает SyntaxError: invalid syntax на более старом питоне, потому что я использую оператор моржа (намного позже в коде).
@NO_NAME Вы не можете избежать этого, синтаксис всегда будет анализироваться и проверяться прежде всего.
Пытаться:
if not sys.version_info >= (3, 5, 2):
raise EnvironmentError()
Или, что еще лучше, какое-нибудь пользовательское исключение с полезным сообщением,
Проверьте это: stackoverflow.com/questions/1093322/…