17 ответов:
эта информация доступна в разделе sys.версия строка 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, etc) и даже releaselevel (='alpha','final'и т. д.) к кортежу, как вам нравится. Однако обратите внимание, что почти всегда лучше "утка" проверить, есть ли определенная функция, а если нет, обходной путь (или спасение). Иногда функции уходят в более новых версиях, заменяясь другими.
из командной строки (обратите внимание на заглавную "в"):
python -Vэто задокументировано в 'MAN python'.
мне нравится
sys.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!" >>>
использовать
platform' spython_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, чем целевая, могут даже не загружать скрипт, поэтому не будет достаточно далеко, чтобы сообщить об этой ошибке. В качестве обходного пути, вы можете запустить выше в сценарии, который импортирует сценарий с более современным кодом.
вот короткая версия командной строки, которая выходит сразу (удобно для скриптов и автоматического выполнения):
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. >>>
import sys sys.version.split(' ')[0]sys.версия дает вам то, что вы хотите, просто выберите первый номер :)
как сказал Сет, основной скрипт может проверить
sys.version_info(но обратите внимание, что это не появилось до 2.0, поэтому, если вы хотите поддерживать более старые версии, вам нужно будет проверить другое свойство версии модуля sys).но вам все равно нужно позаботиться о том, чтобы не использовать какие-либо функции языка Python в файле, которые недоступны в более старых версиях Python. Например, это разрешено в Python 2.5 и более поздних версиях:
try: pass except: pass finally: passно не будет работать в старых версиях Python, потому что вы могли бы только за исключением или, наконец, соответствовать попытке. Поэтому для совместимости со старыми версиями Python вам нужно написать:
try: try: pass except: pass finally: pass
С
sixмодуль, вы можете сделать это:import six if six.PY2: # this is python2.x else: # six.PY3 # this is python3.x
проверьте версию Python:
python -Vилиpython --versionилиapt-cache policy pythonвы также можете запустить
whereis pythonчтобы увидеть, сколько версий установлено.
чтобы увидеть сценарий MSDOS для проверки версии перед запуском интерпретатора Python (чтобы избежать исключений синтаксиса версии Python) см. решение:
как я могу проверить версию Python в программе, которая использует новые языковые функции?
и
MS script; проверка версии Python предварительный запуск модуля Python http://pastebin.com/aAuJ91FQ (сценарий, вероятно, легко конвертировать в другие сценарии ОС.)
несколько ответов уже подсказали, как запрос текущая версия python. К Регистрация программно требования к версии, я бы использовал один из следующих двух методов:
# 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/pythons/, который представляет собой скрипт для тестирования фрагмента кода на многих версиях python сразу, так что вы можете легко получить представление о том, какие функции 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")
Если вы работаете на linux просто дайте команду
pythonвывод будет такимPython 2.4.3 (#1, Jun 11 2009, 14:09:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] на linux2
введите" справка"," авторское право"," кредиты "или" лицензия " для получения дополнительной информации информация.
sys.version_infoне похоже, чтобы возвратитьtupleпо состоянию на 3.7. Скорее, он возвращает специальный класс, поэтому все примеры, использующие кортежи, не работают, по крайней мере для меня. Вот вывод из консоли python:>>> import sys >>> type(sys.version_info) <class 'sys.version_info'>я обнаружил, что с помощью комбинации
sys.version_info.majorиsys.version_info.minorкажется, достаточно. Например.,..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.
Comments