Python 2和Python 3的差异、3.x各个小版本之间的功能变化,是很多诡异问题的根源。比如f-string需要Python 3.6以上,walrus运算符需要3.8以上,如果脚本在不满足要求的解释器上运行,轻则功能异常,重则直接报语法错误。因此在脚本运行时输出并检查Python版本,是一个既简单又实用的习惯。本文介绍几种在脚本运行时获取版本信息的方法,并讲解如何在代码中做版本判断。

方法一:使用sys模块获取版本信息
sys模块是Python内置的标准库,其中包含了当前解释器的详细版本信息。最常用的是sys.version属性,它返回一个包含完整版本号、编译器信息和构建日期的字符串;而sys.version_info则返回一个结构化的元组对象,非常适合在代码中做版本比较。
下面是一个完整的示例脚本,演示如何提取并输出这些信息:
import sys
# 输出完整的版本字符串,包含主版本号、次版本号、修订号等
print("sys.version:", sys.version)
# version_info 是一个具名元组,可以按索引或属性访问
print("主版本号:", sys.version_info.major)
print("次版本号:", sys.version_info.minor)
print("修订号:", sys.version_info.micro)
print("releaselevel:", sys.version_info.releaselevel)
print("serial:", sys.version_info.serial)
# 拼接成常见的版本号形式,例如 3.11.4
print("当前版本: {}.{}.{}".format(
sys.version_info.major,
sys.version_info.minor,
sys.version_info.micro
))运行后你会看到类似3.11.4 (main, Jun 20 2023, 12:36:10) [GCC 9.4.0]这样的输出。sys.version适合展示给用户看,而sys.version_info适合程序内部判断,因为它是元组结构,可以直接比较大小。
需要特别注意的是,sys.version_info的比较能力非常有用。你可以直接写sys.version_info >= (3, 8)这样的判断语句,元组会按位置逐项比较,代码简洁且不易出错。这也是官方文档推荐的版本检查方式。
方法二:使用platform模块获取更友好的版本信息
platform模块同样属于标准库,它提供的信息更加规整。platform.python_version()返回形如3.11.4的纯版本号字符串,platform.python_version_tuple()则返回字符串形式的元组,方便逐项使用。
import platform
# 返回纯版本号字符串,例如 3.11.4
print("python_version:", platform.python_version())
# 返回字符串元组,例如 ('3', '11', '4')
major, minor, patch = platform.python_version_tuple()
print("主版本:", major, "次版本:", minor, "修订:", patch)
# 还可以查看解释器实现,例如 CPython 或 PyPy
print("实现:", platform.python_implementation())
# 查看编译信息
print("编译器:", platform.python_compiler())platform模块的优势在于输出干净规整,没有多余信息,特别适合记录日志或者生成环境报告。此外platform.python_implementation()能告诉你当前运行的是CPython、PyPy还是其他实现,在排查跨解释器兼容问题时很有价值。
不过要注意一点:python_version_tuple()返回的元素是字符串而不是整数,如果要做数值比较,需要先用int()转换。这一点和sys.version_info不同,后者返回的就是整数,比较起来更直接。所以在需要判断版本高低的场景,优先使用sys.version_info更稳妥。
在脚本中加入版本检查,避免兼容性问题
单纯输出版本只是第一步,更实用的做法是在脚本启动时主动检查版本,不满足要求时给出清晰提示并退出,而不是让程序在运行到一半时抛出难以理解的错误。
一种常见的写法是在脚本入口处做版本断言:
import sys
# 要求 Python 3.8 及以上版本
MIN_VERSION = (3, 8)
if sys.version_info < MIN_VERSION:
# 写给 Python 2 用户的提示,避免 f-string 语法在旧版本上报错
print("错误: 本脚本需要 Python {} 及以上版本,当前版本为 {}.{}.{}".format(
MIN_VERSION[0], MIN_VERSION[1],
sys.version_info.major, sys.version_info.minor,
sys.version_info.micro
))
sys.exit(1)
print("版本检查通过,继续执行主逻辑")
# 这里可以放心使用 f-string、walrus 运算符等新特性
name = "Python"
print(f"Hello, {name}!")这段代码有一个细节值得留意:提示信息使用format而不是f-string。原因是如果用户用的是Python 3.5及更早版本,f-string本身就会触发语法错误,脚本根本跑不到版本判断那一步。所以在做版本保护的代码段里,应当坚持使用最保守的语法。
除了在代码中检查,命令行方式也能快速查看版本。python --version或python -V会输出解释器版本,适合在部署脚本或CI环境中确认环境。如果系统中同时装了Python 2和Python 3,还可以用python2 --version和python3 --version分别确认,避免脚本被错误的解释器执行。
总结与最佳实践建议
综合来看,查看Python版本有三条主要途径:命令行的python --version适合部署前快速确认环境;sys.version适合输出详细的解释器信息;sys.version_info和platform.python_version_tuple()适合在代码中做程序化判断。
实际项目中建议的做法是:在脚本入口统一记录版本信息到日志,同时加上最低版本检查并给出友好提示。这样一旦用户报告问题,日志里的版本信息能帮你迅速判断是否是环境差异导致,省去大量来回沟通的时间成本。对于分发给他人使用的工具脚本,这种版本自检几乎是必备功能,几行代码就能避免绝大多数由环境不一致引发的故障。
Python版本sys.versionplatform模块修改时间:2026-09-04 12:28:32