杰瑞科技汇

用python怎样判断python版本号

使用 sys 模块 (最常用)

sys 模块是与 Python 解释器紧密相关的标准库,获取版本信息最直接、最常用。

用python怎样判断python版本号-图1
(图片来源网络,侵删)

获取版本号字符串 (字符串比较)

如果你只需要获取版本号并进行简单的字符串比较,可以使用 sys.version

import sys
# 打印完整的版本信息,包括编译信息等
print(f"sys.version: {sys.version}")
# 示例输出: sys.version: 3.9.7 (default, Sep 16 2025, 16:59:28) [MSC v.1916 64 bit (AMD64)]
# 只获取版本号字符串 (通常前三个数字)
version_string = sys.version.split()[0]
print(f"Version string: {version_string}")
# 示例输出: Version string: 3.9.7

优点:

  • 非常直观,直接获取版本字符串。

缺点:

  • 返回的是字符串,直接比较可能会有问题。"3.10" 会小于 "3.9",因为按字典序 '1' < '9',这对于需要精确版本判断的场景是不准确的。

获取版本信息元组 (推荐,用于精确判断)

为了解决字符串比较的问题,sys 模块提供了 sys.version_info,它返回一个元组,包含了主版本号、次版本号、微版本号等信息。这是进行版本判断最推荐的方式。

用python怎样判断python版本号-图2
(图片来源网络,侵删)
import sys
# 打印版本信息元组
print(f"sys.version_info: {sys.version_info}")
# 示例输出: sys.version_info: sys.version_info(major=3, minor=9, micro=7, releaselevel='final', serial=0)
# 你可以像访问元组一样访问各个部分
major = sys.version_info.major
minor = sys.version_info.minor
print(f"Major: {major}, Minor: {minor}")
# --- 进行版本比较 ---
# Python 3.6+ 的推荐写法
if sys.version_info >= (3, 6):
    print("Python 版本大于或等于 3.6")
else:
    print("Python 版本小于 3.6")
# 更复杂的判断
if sys.version_info > (3, 10, 1):
    print("Python 版本大于 3.10.1")
elif sys.version_info == (3, 10, 1):
    print("Python 版本等于 3.10.1")
else:
    print("Python 版本小于 3.10.1")

优点:

  • 可以进行精确的数值比较,避免了字符串比较的陷阱。
  • 返回的结构化信息更清晰,易于访问。

缺点:

  • 无。

使用 platform 模块

platform 模块提供了更多关于系统平台和 Python 实现的信息,它也可以获取版本号。

import platform
# 获取 Python 的实现名称 (如 CPython, PyPy, Jython)
print(f"Python implementation: {platform.python_implementation()}")
# 示例输出: Python implementation: CPython
# 获取版本号字符串
version_string = platform.python_version()
print(f"Python version string: {version_string}")
# 示例输出: Python version string: 3.9.7
# 获取版本信息元组
version_tuple = platform.python_version_tuple()
print(f"Python version tuple: {version_tuple}")
# 示例输出: Python version tuple: ('3', '9', '7')
# --- 进行版本比较 ---
# 你可以将字符串转换为元组进行比较
major, minor, patch = map(int, version_tuple)
if (major, minor) >= (3, 6):
    print("Python 版本大于或等于 3.6 (using platform)")

优点:

用python怎样判断python版本号-图3
(图片来源网络,侵删)
  • 除了版本号,还能获取 Python 的实现(如 CPython, PyPy),这在某些情况下很有用。

缺点:

  • platform.python_version() 返回的是字符串,需要手动转换才能进行精确比较,不如 sys.version_info 方便。

使用 __version__ 属性 (不推荐用于判断)

一些第三方库(如 numpy, pandas)以及某些 Python 实现可能会在 sys 模块上定义 __version__ 属性。Python 的标准解释器(CPython)并没有这个属性。

import sys
# 这个方法在标准的 CPython 中会引发 AttributeError
try:
    print(sys.__version__)
except AttributeError:
    print("标准的 CPython 解释器没有 sys.__version__ 属性")
# 某些库有这个属性,但这是库的版本,不是 Python 的版本
# 
# import numpy as np
# print(np.__version__)  # 这是 numpy 的版本

绝对不要用 sys.__version__ 来判断 Python 版本,因为它不可靠,在标准 CPython 中根本不存在。


总结与最佳实践

方法 属性/函数 返回类型 推荐用途 示例
sys sys.version 字符串 仅需快速查看或打印完整版本信息 print(sys.version)
sys (推荐) sys.version_info 命名元组 版本判断和比较 if sys.version_info >= (3, 6):
platform platform.python_version() 字符串 需要版本字符串或实现信息 ver_str = platform.python_version()
platform platform.python_version_tuple() 元组 (字符串) 需要结构化版本信息 major, minor, _ = platform.python_version_tuple()

最佳实践

如果你想编写跨版本的 Python 脚本,并且需要根据版本执行不同的代码,请始终使用 sys.version_info

import sys
def my_cool_function():
    # 这个函数需要 Python 3.7+ 的特性,比如字典合并运算符 |
    if sys.version_info >= (3, 7):
        print("使用 Python 3.7+ 的新特性")
        config_a = {'key1': 'value1'}
        config_b = {'key2': 'value2'}
        final_config = config_a | config_b # 字典合并
        print(f"合并后的配置: {final_config}")
    else:
        print("使用向后兼容的旧方法")
        config_a = {'key1': 'value1'}
        config_b = {'key2': 'value2'}
        final_config = {**config_a, **config_b} # 字典解包合并
        print(f"合并后的配置: {final_config}")
my_cool_function()

在命令行中快速查看版本

如果你只是想快速查看当前 Python 的版本,可以在终端/命令行中使用以下命令:

# 查看主版本号
python --version
# 或者
python -V
# 查看更详细的版本信息,包括编译信息等
python -c "import sys; print(sys.version)"

对于 Python 3,你可能需要使用 python3

python3 --version
python3 -V
分享:
扫描分享到社交APP
上一篇
下一篇