Как определить версию Python во время выполнения?

У меня есть файл Python, который, возможно, должен поддерживать версии Python = 3.x. Есть ли способ исследовать среду выполнения Python, чтобы узнать версию, на которой он запущен (например, 2.6 or 3.2.x )?

Конечно, посмотрите sys.version и sys.version_info .

Например, чтобы проверить, что вы используете Python 3.x, используйте

 import sys if sys.version_info[0] < 3: raise Exception("Must be using Python 3") 

Здесь sys.version_info[0] является основным номером версии. sys.version_info[1] предоставит вам младший номер версии.

В Python 2.7 и более поздних компонентах sys.version_info также можно получить доступ по имени, поэтому основным номером версии является sys.version_info.major .

См. Также Как проверить версию Python в программе, использующей новые языковые функции?

Попробуйте этот код, это должно работать:

 import platform print(platform.python_version()) 

Per sys.hexversion и API и ABI Versioning :

 import sys if sys.hexversion >= 0x3000000: print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion)) 

Лучшее решение зависит от того, насколько код несовместим. Если есть много мест для поддержки Python 2 и 3, six – модуль совместимости. six.PY2 и six.PY3 – два логических значения, если вы хотите проверить версию.

Однако лучшее решение, чем использование множества утверждений if заключается в том, чтобы использовать six функций совместимости, если это возможно. Гипотетически, если Python 3000 имеет новый синтаксис для next , кто-то может обновить six чтобы ваш старый код все равно работал.

 import six #OK if six.PY2: x = it.next() # Python 2 syntax else: x = next(it) # Python 3 syntax #Better x = six.next(it) 

http://pythonhosted.org/six/

ура

Вот код, который я использую с sys.version_info для проверки установки Python:

 def checkInstallation(rv): currentVersion = sys.version_info if currentVersion[0] == rv[0] and currentVersion[1] >= rv[1]: pass else: sys.stderr.write( "[%s] - Error: Your Python interpreter must be %d.%d or greater (within major version %d)\n" % (sys.argv[0], rv[0], rv[1], rv[0]) ) sys.exit(-1) return 0 ... # Calling the 'checkInstallation' function checks if Python is >= 2.7 and < 3 requiredVersion = (2,7) checkInstallation( requiredVersion ) 

На всякий случай, если вы хотите увидеть все детали gory в удобочитаемой форме, вы можете использовать:

 import platform; print(platform.sys.version); 

Выход для моей системы:

 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0] 

Что-то очень подробное, но машинное parsingчивое было бы получить объект version_info от platform.sys вместо этого, а затем использовать его свойства для принятия предопределенного действия. Например:

 import platform; print(platform.sys.version_info) 

Вывод в моей системе:

 sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0) 

Чтобы сделать скрипты совместимыми с Python2 и 3, я использую:

 from sys import version_info if version_info[0] < 3: from __future__ import print_function 

Поскольку все, что вас интересует, есть ли у вас Python 2 или 3, немного хакерский, но, безусловно, самый простой и эффективный способ сделать это: python python_version_major = 3/2*2 Единственным недостатком этого является то, что когда есть Python 4, он, вероятно, все равно даст вам 3.

Пример проверки версии ниже.

Обратите внимание, что я не останавливаю выполнение, этот fragment просто:
– ничего не делать, если соответствует точная версия
– напишите INFO, если версия (последний номер) отличается
– напишите WARN, если какой-либо из главных +

 import sys import warnings def checkVersion(): # Checking Python version: expect_major = 2 expect_minor = 7 expect_rev = 14 if sys.version_info[:3] != (expect_major, expect_minor, expect_rev): print("INFO: Script developed and tested with Python " + str(expect_major) + "." + str(expect_minor) + "." + str(expect_rev)) current_version = str(sys.version_info[0])+"."+str(sys.version_info[1])+"."+str(sys.version_info[2]) if sys.version_info[:2] != (expect_major, expect_minor): warnings.warn("Current Python version was unexpected: Python " + current_version) else: print(" Current version is different: Python " + current_version) 
  • тип намека в classе
  • Может ли Python распечатать определение функции?
  • Функции, которые помогают понять структуру json (dict)
  • Почему аргументы, не относящиеся к умолчанию, соответствуют аргументам по умолчанию?
  • Как создавать списки содержат только отдельный элемент в Python?
  • Как конвертировать секунды в часы, минуты и секунды?
  • Каков самый быстрый способ открыть URL-адреса на новых вкладках через Selenium-Python?
  • Как использовать инструкцию pass?
  • Вызов функции модуля с использованием его имени (строки)
  • Что означает% s в строке формата python?
  • Как изменить каталог (cd) в Python?
  • Давайте будем гением компьютера.