Как я могу проверить на версию Python в программе, которая использует новые функции языка?

235
задан Martin Thoma 28 August 2014 в 08:19
поделиться

8 ответов

Можно протестировать использование eval:

try:
  eval("1 if True else 2")
except SyntaxError:
  # doesn't have ternary

кроме того, with доступны в Python 2.5, просто добавьте from __future__ import with_statement.

РЕДАКТИРОВАНИЕ: для получения контроля достаточно рано Вы могли разделить его на различный .py файлы и проверить совместимость в основной файл прежде, чем импортировать (например, в __init__.py в пакете):

# __init__.py

# Check compatibility
try:
  eval("1 if True else 2")
except SyntaxError:
  raise ImportError("requires ternary support")

# import from another module
from impl import *
108
ответ дан martineau 23 November 2019 в 03:28
поделиться

Я думаю, что лучший способ состоит в том, чтобы протестировать на функциональность, а не версии. В некоторых случаях это тривиально, не так в других.

, например:

try :
    # Do stuff
except : # Features weren't found.
    # Do stuff for older versions.

, пока Вы конкретны в достаточно в использовании блоков попытки/кроме, можно покрыть большинство баз.

1
ответ дан sykora 23 November 2019 в 03:28
поделиться

Наборы стали частью базового языка в Python 2.4 для пребывания назад совместимыми. Я сделал это тогда, которое будет работать на Вас также:

if sys.version_info < (2, 4):
    from sets import Set as set
7
ответ дан Peter Mortensen 23 November 2019 в 03:28
поделиться

Попробуйте

import platform
platform.python_version()

, Должен дать Вам строку как "2.3.1". Если это не точно waht, Вы хотите существует богатый набор доступных данных через сборку "платформы" - в. То, что Вы хотите, должно быть там где-нибудь.

31
ответ дан James Anderson 23 November 2019 в 03:28
поделиться

Имейте обертку вокруг своей программы, которая делает следующее.

import sys

req_version = (2,5)
cur_version = sys.version_info

if cur_version >= req_version:
   import myApp
   myApp.run()
else:
   print "Your Python interpreter is too old. Please consider upgrading."

можно также рассмотреть использование sys.version(), если Вы планируете встретиться с людьми, которые используют пред2.0 интерпретатора Python, но тогда у Вас есть некоторые регулярные выражения, чтобы сделать.

И могли бы быть более изящные способы сделать это.

103
ответ дан Peter Mortensen 23 November 2019 в 03:28
поделиться

Как насчет этого:

import sys

def testPyVer(reqver):
  if float(sys.version[:3]) >= reqver:
    return 1
  else:
    return 0

#blah blah blah, more code

if testPyVer(3.0) == 1:
  #do stuff
else:
  #print python requirement, exit statement
-2
ответ дан 23 November 2019 в 03:28
поделиться

Проблема довольно проста. Вы проверили, была ли версия меньше 2.4, не меньше или равна . Итак, если версия Python - 2.4, она не меньше, чем 2.4. У вас должно было быть:

    if sys.version_info **<=** (2, 4):

, а не

    if sys.version_info < (2, 4):
-3
ответ дан 23 November 2019 в 03:28
поделиться

Вероятно, лучший способ сделать это сравнение версий - использовать sys.hexversion . Это важно, потому что сравнение кортежей версий не даст желаемого результата во всех версиях Python.

import sys
if sys.hexversion < 0x02060000:
    print "yep!"
else:
    print "oops!"
22
ответ дан 23 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: