如何确保脚本由特定版本的 python 执行? [复制]

Posted

技术标签:

【中文标题】如何确保脚本由特定版本的 python 执行? [复制]【英文标题】:How to make sure the script is executed by a specific version of python? [duplicate] 【发布时间】:2019-09-17 05:58:24 【问题描述】:

正如问题所问,我想确保脚本是由特定版本的 python 执行的,比如 =>3.5.2。

如何确保脚本在执行时被特定版本调用。

这个检查应该在 python 脚本本身中完成。

如果解决方案独立于平台可能会更好。

【问题讨论】:

查看这个:***.com/questions/1093322/… @Sanyash 我想知道如果第一次错过了如何重新标记为重复。 @ayorgo 对不起,我不知道,也许你应该在 meta 上问。顺便说一句,根据我的经验,您错误的欺骗标志将被标记为有帮助,问题将被关闭。因此,您可以像以前一样编辑您的评论。 老实说,Sanyash 能够更好地理解我的问题,这是问题的正确链接。 How to make the Shebang be able to choose the correct Python interpreter between python3 and python3.5 的可能重复项。另见Any reason not to use /usr/bin/env python2/python3 explicitly? 【参考方案1】:

您可以致电sys.version_info查看版本。这将为您提供sys.version_info(major=3, minor=6, micro=5, releaselevel='final', serial=0) 形式的元组。

【讨论】:

我想确保被调用的python 大于提供的版本,而不是检查是否安装了python 3.6.5,是否会通过这个来完成检查? 您可以将sys.version_info 的输出与您想要的进行比较。 sys.version_info 将为您提供有关当前正在运行的 python 版本的信息。 例如sys.version_info.major >= 3 and sys.version_info.minor >= 5 and sys.version_info.micro >= 2(虽然这不是您想要的布尔表达式,但您仍然需要添加检查,例如 3.6.1) 实际上@ruohola 的回答有更好的比较方式【参考方案2】:

只需将其添加到脚本的开头即可:

import sys

assert sys.version_info >= (3, 5, 2), "Python version too low."

或者如果你喜欢不使用assert:

import sys

if not sys.version_info >= (3, 5, 2):
    raise EnvironmentError("Python version too low.")

或者稍微冗长一点,但这实际上会告知用户他们需要什么版本:

import sys

MIN = (3, 5, 2)
if not sys.version_info >= MIN:
    raise EnvironmentError(
        "Python version too low, required at least ".format('.'.join(str(n) for n in MIN)))

示例输出:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    "Python version too low, required at least ".format('.'.join(str(n) for n in MIN)))
OSError: Python version too low, required at least 3.5.2

 

指定的最小版本元组可以根据需要精确。这些都是有效的:

MIN = (3,)
MIN = (3, 5)
MIN = (3, 5, 2)

【讨论】:

@brunns 是的,非常正确,编辑了另一种方法。 不是一个完美的测试。 assert sys.version_info &gt;= (3, 8) 在较旧的 python 上产生 SyntaxError: invalid syntax,因为我使用的是海象运算符(在代码的后面很多)。 @NO_NAME 你无法避免,语法总是会在其他任何事情之前被解析和验证。【参考方案3】:

试试:

if not sys.version_info >= (3, 5, 2):
    raise EnvironmentError()

或者,更好的是,一些带有有用消息的自定义异常,

【讨论】:

以上是关于如何确保脚本由特定版本的 python 执行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 script.py 中调用特定的 Python 版本——Windows

如何确保在 Python 中一次只能由一个请求执行一段代码?

用于运行命令行的 Python 脚本,该命令行启动具有特定 Python 版本的 Python 脚本

如何使用脚本在 python 中安装特定版本的模块/库

脚本编译后如何在python中重新加载模块?

如何仅删除由特定 matlab 脚本创建的变量