gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:55:40 26 4
gpt4 key购买 nike

我正在尝试分发我的 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 库吗?有没有其他方法?

最佳答案

一种选择是使用散列符号指定 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)

hash bang 可能是最好的选择,因为它实际上确保脚本将由“python2.6”而不是其他解释器解释;但是,也有一些缺点:

  • 这仅适用于使用哈希 bang 的类 UNIX 系统。
  • 如果安装了 Python2.7 而不是 Python 2.6,这将不起作用。

作为解决方法,您可以创建一个“启动器”Python 脚本来检查“python2.6”...“python2.9”,这是 Python 3.0 之前 2.6+ 行的最后一个可能版本+。然后,此启动器脚本可以使用它在搜索过程中找到的任何 Python 解释器来调用您的主程序。您必须以使用大多数 Python 版本通用元素的方式制作启动器脚本。

借自test if executable exists in 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 Nonedef first_which(progs):    for prog in progs:        progloc = which(prog)        if progloc != None:            return progloc    return Nonedef 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...

我自己的观点是上面的方法比必要的更复杂,我会直接使用 hash bang ......或者我会在部署时将 hash bang 写到 Python 文件中,使用除Python(版本不是问题...否则,它会成为递归问题)。

我还强烈建议您不要在软件分发中包含 Python 的副本。这将使您的下载量更大,并且会惹恼已经有效安装 Python 的用户。相反,您应该简单地指导用户下载并安装合适的版本(如果该版本不可用)。

关于python - 安装 Python 脚本,维护对 Python 2.6 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com