У меня есть файл Python, который, возможно, должен поддерживать версии Python < 3.x и >= 3.x. Есть ли способ интроспектировать среду выполнения Python, чтобы узнать версию, на которой он запущен (например, 2.6 or 3.2.x
)?
Как определить версию Python во время выполнения?
Ответ 1
Конечно, взгляните на 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 в программе, использующей новые языковые функции?
Ответ 2
Попробуйте этот код, это должно работать:
import platform
print(platform.python_version())
Ответ 3
Для sys.hexversion и версий API и ABI:
import sys
if sys.hexversion >= 0x3000000:
print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion))
Ответ 4
Лучшее решение зависит от того, сколько кода несовместимо. Если для поддержки 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)
Приветствия
Ответ 5
Если вы хотите увидеть все кровавые подробности в удобочитаемой для человека форме, вы можете использовать:
import platform;
print(platform.sys.version);
Вывод для моей системы:
3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56)
[GCC 7.2.0]
Что-то очень подробное, но машинно-разборное, - это получить объект version_info
из platform.sys
, а затем использовать его свойства, чтобы выполнить предопределенный курс действий. Например:
import platform;
print(platform.sys.version_info)
Вывод в моей системе:
sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
Ответ 6
Вот код, который я использую с sys.version_info
, чтобы проверить установку Python:
def check_installation(rv):
current_version = sys.version_info
if current_version[0] == rv[0] and current_version[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 'check_installation' function checks if Python is >= 2.7 and < 3
required_version = (2,7)
check_installation(required_version)
Ответ 7
Чтобы сделать скрипты совместимыми с Python2 и 3, я использую:
from sys import version_info
if version_info[0] < 3:
from __future__ import print_function
Ответ 8
Пример проверки версии ниже.
Обратите внимание, что я не прекращаю выполнение, этот фрагмент просто:
- ничего не делать, если точная версия соответствует
- напишите INFO, если ревизия (последний номер) отличается
- напишите ПРЕДУПРЕЖДЕНИЕ, если какой-либо из основных + второстепенных отличается
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)
Ответ 9
Поскольку все, что вас интересует, это наличие у вас Python 2 или 3, немного хакерский, но, безусловно, самый простой и 100% работающий способ сделать это будет следующим:
python
python_version_major = 3/2*2
Единственный недостаток этого заключается в том, что когда есть Python 4, он, вероятно, все еще даст вам 3.