Можно протестировать использование 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 *
Я думаю, что лучший способ состоит в том, чтобы протестировать на функциональность, а не версии. В некоторых случаях это тривиально, не так в других.
, например:
try :
# Do stuff
except : # Features weren't found.
# Do stuff for older versions.
, пока Вы конкретны в достаточно в использовании блоков попытки/кроме, можно покрыть большинство баз.
Наборы стали частью базового языка в Python 2.4 для пребывания назад совместимыми. Я сделал это тогда, которое будет работать на Вас также:
if sys.version_info < (2, 4):
from sets import Set as set
Попробуйте
import platform platform.python_version()
, Должен дать Вам строку как "2.3.1". Если это не точно waht, Вы хотите существует богатый набор доступных данных через сборку "платформы" - в. То, что Вы хотите, должно быть там где-нибудь.
Имейте обертку вокруг своей программы, которая делает следующее.
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, но тогда у Вас есть некоторые регулярные выражения, чтобы сделать.
И могли бы быть более изящные способы сделать это.
Как насчет этого:
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.4, не меньше или равна . Итак, если версия Python - 2.4, она не меньше, чем 2.4. У вас должно было быть:
if sys.version_info **<=** (2, 4):
, а не
if sys.version_info < (2, 4):
Вероятно, лучший способ сделать это сравнение версий - использовать sys.hexversion
. Это важно, потому что сравнение кортежей версий не даст желаемого результата во всех версиях Python.
import sys
if sys.hexversion < 0x02060000:
print "yep!"
else:
print "oops!"