У меня есть файл Python, который, возможно, должен поддерживать версии Python < 3.x и> = 3.x. Есть ли способ интроспектировать среду выполнения Python, чтобы узнать версию, на которой он запущен (например, 2.6 or 3.2.x
)?Определить версию Python во время выполнения
ответ
Несомненно, посмотрите на sys.version
и sys.version_info
.
Например, чтобы проверить, что вы работаете в Python 3.x, используйте
import sys
if sys.version_info[0] < 3:
raise "Must be using Python 3"
Здесь sys.version_info[0]
является основной номер версии. sys.version_info[1]
предоставит вам младший номер версии.
В Python 2.7 и более поздних версиях также можно получить доступ к компонентам sys.version_info
, поэтому основной номер версии: sys.version_info.major
.
Смотрите также How can I check for Python version in a program that uses new language features?
использовать 'raise Exception (« Должен использовать Python 3 »)', чтобы избежать ошибки. См. [Http: // stackoverflow.ком/вопросы/11497234/typeerrorexceptions-должно-быть-старый стиль-классы или производные-от-baseexception-нет] (http://stackoverflow.com/questions/11497234/typeerrorexceptions-must-be-old-style -classes-or-born-from-baseexception-no) – user906489
Per sys.hexversion и API and ABI Versioning:
import sys
if sys.hexversion >= 0x3000000:
print('Python 3.x hexversion %s is in use.' % hex(sys.hexversion))
Поскольку это позволяет тестировать как основные, так и младшие версии в одном простом и легко читаемом тесте, я думаю, что это лучший ответ. – John1024
Вот код, я использую с 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)
сделать скрипты совместимы с python2 и 3 i использовать:
from sys import version_info
if version_info[0] < 3:
from __future__ import print_function
Это необязательно, просто добавьте 'from__future__ import print_function' без проверки версии. Импорт ничего не делает в Python 3. –
Попробуйте этот код, это должно работать:
import platform
print(platform.python_version())
FYI это работает, но функция 'python_version' возвращает строку (например, в моей системе она печатает' '3.6.1''). Если вы проверяете версию в выражении 'if', таком как OP, ответ Криса имеет гораздо больший смысл, так как вам не нужно проходить неуклюжий процесс поиска строки для нужной информации. Этот ответ - это путь, если вы хотите зарегистрировать или отобразить версию для чтения человеком. – NauticalMile
@NauticalMile Ответ Криса также возвращает строку, он просто индексирует в первый символ, чтобы увидеть, является ли это «3» или нет; то же самое будет работать здесь. – weberc2
Hoe это решает проблему лучше, если вообще нет? Использование sys.version_info [0] или просто sys.version [0] уже достаточно ... – Apostolos
Лучшее решение зависит от того, сколько коды несовместимо. Если есть много мест для поддержки 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)
Приветствия
проверка версии ниже пример.
Обратите внимание, что я не остановить выполнение, этот фрагмент просто:
- ничего не делать, если точная версия соответствует
- запись информации, если ревизия (последний номер) отличается
- писать WARN, если какие-либо из крупного + минора является разные
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)
- 1. Определить версию Spring во время выполнения
- 2. Как определить версию модификации во время выполнения?
- 3. Определить классы во время выполнения
- 4. Как указать версию gcc во время выполнения?
- 5. Как определить версию OpenGl во время выполнения. Android
- 6. Определить модуль во время выполнения
- 7. Какао: получить версию Дарвина во время выполнения
- 8. Получить версию jar во время выполнения
- 9. Проверьте версию iOS во время выполнения?
- 10. Получить версию node.js во время выполнения
- 11. Проверить версию GCC во время выполнения
- 12. Получить Maven версию артефакта во время выполнения
- 13. Как определить версию DbgHelp во время компиляции?
- 14. Как определить версию Jboss во время установки?
- 15. Определить версию ASF во время компиляции
- 16. Определить выполнение `constexpr` - во время компиляции или во время выполнения?
- 17. Python Ошибка во время выполнения
- 18. Определить типы данных во время выполнения
- 19. Определить использование CRYPTOPP_BOOL_AESNI_INTRINSICS_AVAILABLE во время выполнения
- 20. Как определить тип переменной во время выполнения
- 21. Определить таблицу во время выполнения с Linq
- 22. Определить wsHttpBinding во время выполнения с WCF
- 23. Определить функцию C++ во время выполнения
- 24. Определить условие оператора IF во время выполнения
- 25. Как определить тип объекта во время выполнения?
- 26. Определить тип объекта во время выполнения - C#
- 27. Определить устройство iPhone во время выполнения
- 28. Определить характер параметра во время выполнения
- 29. Определить тип возврата ProvidedMethod во время выполнения
- 30. определить log4j местоположение файла во время выполнения
возможно дубликат [Как я могу проверить, какая версия Python работает мой сценарий?] (http://stackoverflow.com/questions/1093322/how-do-i-check-what-version -of-python-is-running-my-script) – drammock