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

获取版本号字符串 (字符串比较)
如果你只需要获取版本号并进行简单的字符串比较,可以使用 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,它返回一个元组,包含了主版本号、次版本号、微版本号等信息。这是进行版本判断最推荐的方式。

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 的实现(如 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
