Как проверить, какая версия Python запускает мой script?
Как проверить, какая версия интерпретатора Python интерпретирует мой script?
Ответы
Ответ 1
Эта информация доступна в строке 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)
Это сравнивает основные и второстепенные версии информации. Добавьте micro (= 0
, 1
и т.д.) И даже уровень релиза (= 'alpha'
, 'final'
и т.д.) В кортеж, как вам нравится. Тем не менее, обратите внимание, что почти всегда лучше проверять наличие определенной функции и, если нет, обходной путь (или выход из кризиса). Иногда функции уходят в новых версиях, заменяя их другими.
Ответ 2
Из командной строки (обратите внимание на столицу "V" ):
python -V
Это описано в "man python".
Ответ 3
Мне нравится sys.hexversion
для таких вещей.
http://docs.python.org/library/sys.html#sys.hexversion
>>> import sys
>>> sys.hexversion
33883376
>>> '%x' % sys.hexversion
'20504f0'
>>> sys.hexversion < 0x02060000
True
Ответ 4
Лучше всего, наверное, что-то вроде этого:
>>> 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!"
>>>
Ответ 5
Используйте platform
python_version
из stdlib:
>>> from platform import python_version
>>> print(python_version())
2.7.8
Ответ 6
Поместите что-то вроде:
#!/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)
вверху вашего script.
Обратите внимание, что в зависимости от того, что еще находится в вашем script, более старые версии python, чем целевой, возможно, не смогут даже загрузить script, поэтому не будут достаточно далеко, чтобы сообщить об этой ошибке. В качестве обходного пути вы можете запустить выше в script, который импортирует script с более современным кодом.
Ответ 7
Здесь короткая версия командной строки, которая выходит сразу (удобна для скриптов и автоматического выполнения):
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)
Ответ 8
С модулем six
вы можете сделать это:
import six
if six.PY2:
# this is python2.x
else:
# six.PY3
# this is python3.x
Ответ 9
import sys
sys.version.split(' ')[0]
sys.version дает вам то, что вы хотите, просто выберите первый номер:)
Ответ 10
Как сказал Сет, основной script может проверить 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
Ответ 11
Самый простой способ
Просто введите 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.
>>>
Ответ 12
Чтобы увидеть MSDOS script, чтобы проверить версию перед запуском интерпретатора Python (чтобы избежать исключений синтаксиса версии Python) См. решение:
Как проверить версию Python в программе, использующей новые языковые функции?
и
MS script; Версия Python проверяет предварительный запуск модуля Python
http://pastebin.com/aAuJ91FQ
(script, вероятно, легко конвертировать в другие скрипты ОС.)
Ответ 13
Несколько ответов уже предлагают, как запросить текущую версию python. Чтобы программно проверить требования к версии, я бы воспользовался одним из следующих двух способов:
# Method 1: (see krawyoti 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")
Ответ 14
Просто для удовольствия, это способ сделать это на 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")
Ответ 15
Проверьте версию Python: python -V
или python --Version
или apt-cache policy python
вы также можете запустить whereis python
чтобы узнать, сколько версий установлено.
Ответ 16
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.
Ответ 17
Если вы хотите обнаружить pre-Python 3 и не хотите ничего импортировать...
... вы можете (ab) использовать изменения области видимости списка и сделать это в одном выражении:
is_python_3_or_above = (lambda x: [x for x in [False]] and None or x)(True)
Ответ 18
Чтобы проверить версию 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'
Ответ 19
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.version: 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
sys.api_version: 1013
sys.version_info: sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0)
sys.hexversion: 50726384
Ответ 20
Если вы работаете над linux, просто дайте команду python
output будет таким образом
Python 2.4.3 (# 1, 11 июня 2009, 14:09:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] на linux2
Введите "помощь", "авторское право", "кредиты" или "лицензия" для получения дополнительной информации.