Как убедиться, что скрипт выполняется определенной версией python?

Как задается вопрос, я хочу быть уверенным, что скрипт выполняется определенной версией Python, скажем => 3.5.2.

Как я могу убедиться, что скрипт при выполнении вызывается конкретной версией.

Эту проверку следует выполнять в самом скрипте Python.

Было бы лучше, если бы решение было независимым от платформы.

Проверьте это: stackoverflow.com/questions/1093322/…

ayorgo 28.04.2019 12:33

@Sanyash Интересно, как можно перепометить как дубликат, если пропустили в первый раз.

ayorgo 28.04.2019 12:35

@ayorgo Извините, я не знаю, может быть, вам следует спросить об этом в мета. Кстати, по моему опыту, ваш неправильный флаг обмана будет отмечен как полезный, и вопрос будет закрыт. Итак, вы можете просто отредактировать свой комментарий, как вы это сделали.

sanyassh 28.04.2019 12:38

Честно говоря, Саняш смог лучше понять мой вопрос, и это правильная ссылка на вопрос.

penta 28.04.2019 12:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
696
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проверить версию можно по телефону sys.version_info. Это даст вам кортеж в форме sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0).

Я хочу быть уверен, что вызываемый python будет больше, чем предоставленная версия, а не проверять, установлен ли python 3.6.5, будет ли эта проверка выполнена этим?

penta 28.04.2019 12:31

Вы можете сравнить результат sys.version_info с тем, что хотите. sys.version_info предоставит вам информацию о том, какая версия Python запущена в данный момент.

Ollie 28.04.2019 12:32

например sys.version_info.major >= 3 and sys.version_info.minor >= 5 and sys.version_info.micro >= 2 (хотя это не совсем то логическое выражение, которое вам нужно, вам все равно нужно добавить проверки, например, для 3.6.1)

Ollie 28.04.2019 12:33

на самом деле ответ @ruohola имеет гораздо лучший способ их сравнения

Ollie 28.04.2019 12:38
Ответ принят как подходящий

Просто добавьте это в начало вашего скрипта:

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 Да, совершенно верно, отредактировал другой способ сделать это.

ruohola 28.04.2019 12:40

Не идеальный тест. assert sys.version_info >= (3, 8) дает SyntaxError: invalid syntax на более старом питоне, потому что я использую оператор моржа (намного позже в коде).

NO_NAME 01.09.2020 20:13

@NO_NAME Вы не можете избежать этого, синтаксис всегда будет анализироваться и проверяться прежде всего.

ruohola 01.09.2020 20:49

Пытаться:

if not sys.version_info >= (3, 5, 2):
    raise EnvironmentError()

Или, что еще лучше, какое-нибудь пользовательское исключение с полезным сообщением,

Другие вопросы по теме