安装 Python 脚本,维护对 Python 2.6 的引用

3
我正在尝试发布我的Python程序。该程序依赖于2.6版本。我阅读了发行文档:http://docs.python.org/distutils/index.html,目前我已经了解到的是,我基本上需要编写一个setup.py脚本。例如:
setup(name='Distutils',
  version='1.0',
  description='Python Distribution Utilities',
  author='My Name',
  author_email='My Email',
  url='some URL',
  package_dir={'': 'src'},
  packages=[''],
 )

我希望确保我的程序在用户安装时使用2.6解释器库。如何确保我的程序使用2.6?我应该随程序一起分发Python 2.6库吗?还有其他替代方法吗?


1
非常有趣的问题,可能适用于许多想要分发他们的代码的人。谢谢! - Morlock
2个回答

1

一种选择是使用哈希标记指定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 用户感到恼怒。相反,您应该直接引导用户下载并安装适当的版本(如果不存在的话)即可。

谢谢你,迈克尔,这非常有帮助。 - zfranciscus

0

检查 sys.hexversion 并确保它大于或等于 0x02060000


sys.hexversion 基本上检查用户计算机中的 Python 版本号。我想确保用户计算机使用 2.6 解释器来执行我的 Python 程序。 - zfranciscus
1
不,它返回运行的解释器版本。 - Ignacio Vazquez-Abrams
1
你应该运行你想要的版本,而不是运行错误的版本然后抱怨。大多数系统安装了多个Python版本,因此在需要2.6时作为“python”运行肯定会导致问题。(不幸的是,没有办法要求“最新的2.x”版本。) - Glenn Maynard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接