一种选择是使用哈希标记指定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("需要版本2.6+,而不是3.0+。")
sys.exit(1)
else:
print "需要版本2.6+。请升级Python。"
sys.exit(1)
哈希标记可能是最好的选择,因为它确保脚本将由“python2.6”解释,而不是其他解释器;但是,它也有一些缺点:
- 这仅适用于使用哈希标记的类UNIX系统。
- 如果安装了Python2.7而没有安装Python 2.6,则无法正常工作。
作为一种解决方法,您可以创建一个“启动器”Python脚本,检查“python2.6”...“python2.9”,这是Python 3.0+之前的2.6+线的最后一个可能版本。然后,此启动器脚本可以使用搜索过程中找到的任何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"])
# 使用"interpreter"调用您的程序
# 您需要使用os.popen或subprocess,
# 根据调用此启动程序的Python版本...
我个人认为上述方法比必要复杂,我会选择使用哈希符号…或者在部署时使用其他语言将哈希符号写入Python文件,这样版本就不是问题了...否则,它成为一个递归问题。
我强烈建议您不要在软件分发中包含 Python 的副本。这样会使下载文件变大,并且会让已经拥有有效安装的 Python 用户感到恼怒。相反,您应该直接引导用户下载并安装适当的版本(如果不存在的话)即可。