Как проверить, какая версия интерпретатора Python интерпретирует мой сценарий?
Эта информация доступна в строке sys.version в модуле sys:
>>> import sys
В человекочитаемом виде:
>>> print(sys.version) # parentheses necessary in python 3.
2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]
Для дальнейшей обработки:
>>> sys.version_info
(2, 5, 2, 'final', 0)
# or
>>> sys.hexversion
34014192
Чтобы обеспечить запуск скрипта с минимальными требованиями к версии интерпретатора Python, добавьте в код следующее:
assert sys.version_info >= (2, 5)
Это сравнивает информацию о мажорной и минорной версии. Добавьте к кортежу микро (=0
, 1
и т.д.) и даже releaselevel (='alpha'
, 'final'
и т.д.) по своему усмотрению. Заметьте, однако, что почти всегда лучше "пригнуться", проверить, есть ли определенная функция, и если нет, обойти ее (или отказаться от нее). Иногда функции исчезают в новых выпусках, заменяясь другими.
Я как сис.hexversion для таких вещей.
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
Лучшим вариантом, вероятно, будет что-то вроде этого:
>>> import sys
>>> sys.version_info
(2, 6, 4, 'final', 0)
>>> if not sys.version_info[:2] == (2, 6):
... print "Error, I need python 2.6"
... else:
... from my_module import twoPointSixCode
>>>
Кроме того, вы всегда можете обернуть ваши импорты в простую попытку, которая должна отлавливать синтаксические ошибки. И, к слову @Heikki', этот код будет совместим с гораздо более старыми версиями python:
>>> try:
... from my_module import twoPointSixCode
... except Exception:
... print "can't import, probably because your python is too old!"
>>>
Использовать платформа
'ы python_version
из stdlib:
>>> from platform import python_version
>>> print(python_version())
2.7.8
Поставить что-то вроде:
#!/usr/bin/env/python
import sys
if sys.version_info<(2,6,0):
sys.stderr.write("You need python 2.6 or later to run this script\n")
exit(1)
в верхней части вашего скрипта.
Обратите внимание, что в зависимости от того, что еще в вашем скрипте, более старыми версиями Python, чем цель, возможно, не сможете даже загрузить скрипт, так что выиграл'т получить достаточно далеко, чтобы сообщить об этой ошибке. В качестве обходного пути, вы можете запустить выше в скрипт, импортирующий скрипт с более современный код.
Здесь's скоро консольная версия, которая выходит сразу (удобно для скриптов и автоматизированного выполнения):
python -c "print(__import__('sys').version)"
Или просто крупных, мелких и микро:
python -c "print(__import__('sys').version_info[:1])" # (2,)
python -c "print(__import__('sys').version_info[:2])" # (2, 7)
python -c "print(__import__('sys').version_info[:3])" # (2, 7, 6)
Просто типа Python в ваш терминал, и вы можете посмотреть версию как следующие
desktop:~$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Как сказал Сет, основной скрипт может проверить сис.version_info` (но учтите, что это не'т, кажется, до 2.0, так что если вы хотите поддерживать старые версии нужно проверить еще одно свойство версию модуля sys).
Но вы все равно должны заботиться не используя каких-либо особенностей языка Python в файл, который не доступен в старых версиях питона. Например, это допускается в Python 2.5 и выше:
try:
pass
except:
pass
finally:
pass
но выиграл'т работать в более старых версий Python, потому что вы могли иметь только исключением или, наконец, соответствовать попробовать. Поэтому для совместимости с более старыми версиями Python вам нужно написать:
try:
try:
pass
except:
pass
finally:
pass
Несколько ответов уже подсказали, как запрос текущую версию Python. В проверить программно требованиям версии, я'd сделать, используйте один из следующих двух методов:
# Method 1: (see krawyoti's answer)
import sys
assert(sys.version_info >= (2,6))
# Method 2:
import platform
from distutils.version import StrictVersion
assert(StrictVersion(platform.python_version()) >= "2.6")
Просто для удовольствия, следующий способ, как это сделать на CPython 1.0-3.7b2, в PyPy, языка Jython и Micropython. Это больше из любопытства, чем делать это в современный код. Я писал его как часть http://stromberg.dnsalias.org/~strombrg/питоны/ , который представляет собой скрипт для тестирования фрагментов кода во многих версиях питона сразу, так что вы можете легко понять, что в Python функции являются совместимыми с какой версии Python:
via_platform = 0
check_sys = 0
via_sys_version_info = 0
via_sys_version = 0
test_sys = 0
try:
import platform
except (ImportError, NameError):
# We have no platform module - try to get the info via the sys module
check_sys = 1
if not check_sys:
if hasattr(platform, "python_version"):
via_platform = 1
else:
check_sys = 1
if check_sys:
try:
import sys
test_sys = 1
except (ImportError, NameError):
# just let via_sys_version_info and via_sys_version remain False - we have no sys module
pass
if test_sys:
if hasattr(sys, "version_info"):
via_sys_version_info = 1
elif hasattr(sys, "version"):
via_sys_version = 1
else:
# just let via_sys remain False
pass
if via_platform:
# This gives pretty good info, but is not available in older interpreters. Also, micropython has a
# platform module that does not really contain anything.
print(platform.python_version())
elif via_sys_version_info:
# This is compatible with some older interpreters, but does not give quite as much info.
print("%s.%s.%s" % sys.version_info[:3])
elif via_sys_version:
import string
# This is compatible with some older interpreters, but does not give quite as much info.
verbose_version = sys.version
version_list = string.split(verbose_version)
print(version_list[0])
else:
print("unknown")
...вы можете (АБ)использовать список понимание обзорное изменения и сделать его в одном:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
Сыс.version_info
не'т, кажется, чтобы вернуть Кортеж
в 3.7. Вернее, он возвращает специальный класс, так что все примеры, используя кортежи Дон't работа, для меня по крайней мере. Здесь'ы выходной сигнал из консоли Python:
>>> import sys
>>> type(sys.version_info)
<class 'sys.version_info'>
Я'ве обнаружили, что, используя сочетание `сис.version_info.майор " и " представление sys.version_info.мелкие, кажется, достаточно. Например,...
import sys
if sys.version_info.major > 3:
print('Upgrade to Python 3')
exit(1)
проверяет, если вы'вновь работает с Python 3. Вы даже можете проверить для более конкретных версий с...
import sys
ver = sys.version_info
if ver.major > 2:
if ver.major == 3 and ver.minor <= 4:
print('Upgrade to Python 3.5')
exit(1)
можете проверить, чтобы увидеть, если вы'вновь работает, по крайней мере, в Python 3.5.
Чтобы проверить версию Python для команды в Windows, выполните следующие команды в командной строке и проверьте выходной
c:\>python -V
Python 2.7.16
c:\>py -2 -V
Python 2.7.16
c:\>py -3 -V
Python 3.7.3
Кроме того, чтобы увидеть конфигурацию папки для каждой версии Python, выполните следующие команды:
For Python 2,'py -2 -m site'
For Python 3,'py -3 -m site'
from sys import version_info, api_version, version, hexversion
print(f"sys.version: {version}")
print(f"sys.api_version: {api_version}")
print(f"sys.version_info: {version_info}")
print(f"sys.hexversion: {hexversion}")
выход
представление sys.версия: 3.6.5 (В3.6.5:f59c0932b4, 28 марта 2018, 17:00:18) [КБМ В. 1900 64 бит (для amd64)] представление sys.api_version: 1013 представление sys.version_info: Сыс.version_info(майор=3, минор=6, микро=5, releaselevel='окончательной', последовательный=0) представление sys.hexversion: 50726384
Если вы работаете на Linux просто дайте вывод команды питон
будет такой
в Python 2.4.3 (#1, 11 июня 2009, 14:09:37)
[на GCC 4.1.2 20080704 (Красная Шапочка 4.1.2-44)] на linux2
тип "Помоги мне", то "авторских прав" В, С "кредиты" или "лицензия" и дополнительные информация.