Один из вариантов - указать конкретную версию интерпретатора Python с помощью хеш-взрыва:
#! /usr/bin/env python2.6
Другой вариант - проверить sys.version_info , например:
if (sys.version_info[0] != 2) or (sys.version_info[1]<6):
if sys.version_info[0] > 2:
print("Version 2.6+, and not 3.0+ needed.")
sys.exit(1)
else:
print "Version 2.6+, needed. Please upgrade Python."
sys.exit(1)
Хэш-взрыв, вероятно, является наилучшим вариантом, поскольку он фактически гарантирует, что скрипт будет интерпретироваться "python2.6" вместо какого-либо другого интерпретатора; Однако есть некоторые недостатки:
- Это будет работать только в UNIX-подобных системах, использующих хэш-взрыв.
- Это не будет работать, если установлен Python2.7, но не Python 2.6.
В качестве обходного пути вы можете создать сценарий Python "launcher", который проверяет наличие "python2.6" ... "python2.9", который является последней возможной версией строки 2.6+ до Python 3.0 +. Этот скрипт запуска может затем вызывать вашу основную программу, используя любой интерпретатор Python, который он найдет в процессе поиска. Вам нужно будет создать скрипт запуска таким образом, чтобы использовать элементы, общие для большинства версий Python.
Заимствование из теста, если исполняемый файл существует в Python :
def which(program):
import os
def is_exe(fpath):
return os.path.exists(fpath) and os.access(fpath, os.X_OK)
fpath, fname = os.path.split(program)
if fpath:
if is_exe(program):
return program
else:
for path in os.environ["PATH"].split(os.pathsep):
exe_file = os.path.join(path, program)
if is_exe(exe_file):
return exe_file
return None
def first_which(progs):
for prog in progs:
progloc = which(prog)
if progloc != None:
return progloc
return None
def main():
interpreter=first_which(["python2.6","python2.7","python2.8","python2.9"])
# Invoke your program using "interpreter"
# You will need to use os.popen or subprocess,
# depending on the version of Python which which
# this launcher script was invoked...
Мое собственное мнение состоит в том, что описанный выше метод более сложен, чем необходимо, и я бы просто пошел с хэшем, или я бы записал хэш-файл в файл Python во время развертывания, используя язык, отличный от Python (для которого версия не будет проблемой ... в противном случае это станет рекурсивной проблемой).
Я также настоятельно рекомендую вам НЕ включать копию Python в ваш дистрибутив программного обеспечения. Это сделает вашу загрузку намного больше, и это будет раздражать пользователей, у которых уже есть действующая установка Python. Вместо этого вам следует просто направить пользователей на загрузку и установку соответствующей версии, если она недоступна.