Python 版本:Python 2 与 3 的区别、3.10–3.15 的新特性,以及该安装哪个版本
目前仍在维护的是 Python 3 分支,最新稳定版为 Python 3.15(2026 年 10 月 9 日发布);Python 2 自 2020 年起已不再支持。新版本每年十月发布,并获得约五年的支持,因此新项目应使用较新的 3.x 版本,查看当前版本可运行 python3 --version。
目前仍在活跃开发的分支只有 Python 3。最新稳定版是 Python 3.15,于 2026 年 10 月 9 日发布;而 Python 2 早在 2020 年就正式结束了生命周期。下面说明各版本之间的区别、3.10 至 3.15 各自带来了什么,应当安装哪个版本,以及如何查看你电脑上装的是哪一个。
Python 版本号是如何编排的
版本号由三个数字组成,例如 3.15.0。第一个数字是主版本(语言分支),第二个是次版本,新功能会出现在其中;第三个是修订号,只包含错误修复。提到「Python 版本」时,通常指的是次版本,如 3.10、3.11、3.12 等。
自 2019 年起执行年度发布周期(PEP 602):每年十月发布一个新的次版本。发布前大约半年会先推出 alpha、beta 和 release candidate 预览版,发布后则会有 3.15.1、3.15.2 这样的修订版。在修订版之间升级是安全的,语言的行为在补丁版本中不会改变。
搜索中常见的困惑是:「python 311」和「python 3.11」指的是同一个版本,即 3.11。版本号并不是小数,所以 3.10 比 3.9 新,3.15 也比 3.2 新。
Python 2 与 Python 3:区别在哪里
Python 3 发布于 2008 年,为了修正语言早期的设计问题,有意打破了向后兼容性。因此,为 Python 2 编写的代码通常不做修改就无法在 Python 3 中运行。第二个分支的最后版本是 2.7,其支持已于 2020 年 1 月 1 日结束,最终发布版 2.7.18 出现在 2020 年 4 月。
| 项目 | Python 2 | Python 3 |
|---|---|---|
| 打印 | print "hi" — 语句 | print("hi") — 函数 |
| 字符串 | 默认是字节,Unicode 写作 u"..." | str 始终是 Unicode,字节是 bytes |
| 除法 | 7 / 2 得到 3 | 7 / 2 得到 3.5,整除用 7 // 2 |
| 输入 | raw_input() | input() |
| 范围 | range 生成列表,xrange 为惰性 | range 为惰性 |
| 支持情况 | 2020 年起已停止 | 每年都有新版本 |
如果你找到的教程或答案中 print 没有括号,那就是 Python 2 的写法,材料已经过时。现在没有必要学习第二个分支:新系统不再预装它,库也早已停止支持,只有在迁移旧代码时才需要了解它。
Python 3.10–3.15 有哪些新特性
下面列出每个版本中最重要的、会影响日常代码的变化。完整的变更列表可以在官方文档的 What's New 部分找到。
Python 3.10(2021 年 10 月)
- 模式匹配
match/case(PEP 634)— 用来解析数据结构,取代if/elif链。 - 用竖线表示联合类型:
int | None代替Optional[int](PEP 604)。 - 同一个
with语句中可以用括号括起多个上下文管理器。 - 语法错误的提示信息明显更易懂。
def describe(point):
match point:
case (0, 0):
return "原点"
case (x, 0):
return f"位于 X 轴上:{x}"
case _:
return "其他位置"
print(describe((3, 0))) # 位于 X 轴上:3
Python 3.11(2022 年 10 月)
- 性能:Faster CPython 项目使解释器平均提速约四分之一,某些任务提速更多。
- 精确的 traceback 指示:
^^^^箭头标出出错的具体表达式(PEP 657)。 - 异常组与
except*(PEP 654),可以通过add_note()为异常添加注释。 - 标准库新增
tomllib模块,用于读取 TOML 文件,例如pyproject.toml。
Python 3.12(2023 年 10 月)
- 泛型的新语法:
def first[T](items: list[T]) -> T,以及用于类型别名的type语句(PEP 695)。 - f 字符串拥有完整的语法(PEP 701):花括号内可以使用相同的引号、换行甚至注释。
- 标准库中已移除过时的
distutils。 - 错误提示更加详细,例如「是否忘记导入模块?」。
type Pair = tuple[int, int]
def first[T](items: list[T]) -> T:
return items[0]
songs = ["a", "b"]
print(f"第一首:{first(songs)!r},共 {len(songs)} 首")
print(f"{"引号在内"}") # 3.12 起可用
顺便说一下,关于「f 字符串从哪个版本开始支持」的常见问题:f 字符串早在 Python 3.6 就已出现,而 3.12 增加的是在花括号内自由使用引号、换行等语法。
Python 3.13(2024 年 10 月)
- 全新的交互式控制台:带颜色、支持多行编辑和历史记录,
exit和help可以不加括号直接使用。 - 实验性的无 GIL 构建(free-threaded,PEP 703)以及实验性的 JIT 编译器(PEP 744)。
- 移除了一批「过时的电池」,如
cgi和telnetlib模块(PEP 594)。 - 新版本的错误修复支持期延长到两年。
Python 3.14(2025 年 10 月)
- 模板字符串(t 字符串):
t"你好,{name}"返回的不是现成的字符串,而是可以安全处理的模板对象(PEP 750)。 - 注解的延迟求值(PEP 649),减少了引用文件后面才定义的类型时的问题。
- 无 GIL 构建不再是实验性功能,获得了正式支持。
- 新增
compression.zstd模块,控制台支持语法高亮,except A, B:可以不加括号。
Python 3.15(2026 年 10 月 9 日)
- 惰性导入
lazy import(PEP 810):模块在首次使用时才加载,而不是在启动时加载。课程中的测量显示,使用lazy import pandas的脚本启动时间从 280 毫秒降到 14 毫秒。 - 内置不可变字典
frozendict(PEP 814)。 - 推导式中的解包:
[*g for g in groups](PEP 798)。 - 标准库中的采样性能分析器 Tachyon(PEP 799)。
- 处理文件时默认使用 UTF-8(PEP 686),告别 Windows 上的编码意外。
- 错误信息中新增「Did you mean」提示。
lazy import json # PEP 810
cfg = frozendict(limit=500) # PEP 814
flat = [*g for g in [[1, 2], [3]]] # PEP 798 -> [1, 2, 3]
print(flat, cfg["limit"])
# python -m profiling.sampling run app.py # PEP 799, Tachyon
这段代码只能在 3.15 上运行:在更早的版本中,lazy import 和推导式中的解包会导致 SyntaxError,而 frozendict 则会引发 NameError。
Python 版本的支持期限
每个版本的生命周期约为五年。开始阶段会接收常规的错误修复和定期的补丁版本(自 3.13 起为两年),之后直到期限结束只接收安全修复。此后该版本进入终止支持(end-of-life):其中的漏洞不再有人修补。
| 版本 | 发布 | 支持结束 | 2026 年 10 月的状态 |
|---|---|---|---|
| 2.7 | 2010 年 | 2020 年 1 月 | 不再支持 |
| 3.9 | 2020 年 10 月 | 2025 年 10 月 | 不再支持 |
| 3.10 | 2021 年 10 月 | 2026 年 10 月 | 支持即将结束 |
| 3.11 | 2022 年 10 月 | 2027 年 10 月 | 仅安全修复 |
| 3.12 | 2023 年 10 月 | 2028 年 10 月 | 仅安全修复 |
| 3.13 | 2024 年 10 月 | 2029 年 10 月 | 错误修复 |
| 3.14 | 2025 年 10 月 | 2030 年 10 月 | 错误修复 |
| 3.15 | 2026 年 10 月 | 2031 年 10 月 | 最新版 |
各分支的最新状态会发布在 Python Developer's Guide 的 Status of Python versions 页面上。为长期项目选择版本之前,建议先查看那里的信息。
应该安装哪个 Python 版本
学习和新项目请使用最新的稳定版,目前是 Python 3.15。「我选经过验证的 3.10」这种想法并不合适:到 2026 年 10 月,它连安全修复都不再提供,而学习即将过期的版本,以后还得重新适应。Python 3 内部的兼容性很好:为旧版本编写的代码几乎总能在新版本上运行,反过来则不一定。
也有例外。如果所需的库还没有为新版本发布预编译包(这在十月发布后的最初几周内,对于带 C 扩展的包来说很常见),可以先使用上一个版本 3.14。对于长期运行的服务器,请使用发行版仓库中的版本,或通过 uv 安装所需版本。一条基本原则是:不要选择距离支持结束不足一年的版本。
| 情况 | 安装什么 |
|---|---|
| 从零开始学习 | 最新稳定版(3.15) |
| 新项目 | 最新版或倒数第二个次版本 |
| 某个库暂不支持最新版 | 上一个次版本 |
| 使用 3.10 及更早版本的旧项目 | 规划迁移到受支持的版本 |
| Python 2 代码 | 迁移到 Python 3 |
如何查看 Python 版本
在终端中一条命令即可。macOS 和 Linux 通常使用 python3,Windows 上使用 python 或启动器 py。
$ python3 --version
Python 3.12.3 # 版本较旧,该升级了
$ python3 -V
Python 3.15.0
在 Windows 上,启动器会一次列出所有已安装的版本;uv 则会列出它能发现或安装的版本:
py --list
uv python list
在程序内部,版本信息由 sys 模块提供。sys.version_info 元组便于比较,脚本可以借此检查解释器是否符合要求:
import sys
print(sys.version) # 完整字符串,包括构建日期
print(sys.version_info[:3]) # 例如 (3, 15, 0)
if sys.version_info < (3, 10):
raise SystemExit("需要 Python 3.10 或更高版本")
如果 python3 --version 显示的不是你安装的版本,说明 PATH 中优先找到的是另一个解释器。macOS 和 Linux 上可以用 which python3 确认,Windows 上使用 where python。
一台电脑上安装多个版本
同时保留 3.13 和 3.15 是正常的:每个版本都安装在自己的目录中。最方便的管理方式是 uv:uv python install 3.15 下载版本,uv python pin 3.15 则会在 .python-version 文件中为项目固定该版本。Linux 上的系统 Python 最好不要手动修改或升级,因为系统工具依赖它。
项目的最低版本要求写在 pyproject.toml 的 requires-python 字段中,这样包管理器就不会在不合适的解释器上安装该项目。
[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"
总结
当前受支持的 Python 版本属于 3 分支,其中最新的是 3.15,带来了惰性导入、frozendict 以及默认的 UTF-8。Python 2 已在 2020 年结束支持,3.10 将于 2026 年 10 月停止支持,因此学习和启动项目都应使用新版本。查看自己的版本,只需运行 python3 --version。本课程的每个主题末尾都有「3.10–3.15 新特性」模块,版本变化会在实践中逐一演示。
常见问题
开始菜单里的「IDLE Python 3.10 64-bit」是什么?
这是安装程序从 python.org 装入的简易开发环境,名称中包含解释器的版本和位数。如果显示 3.10,说明你装的版本即将停止支持,最好改装新版本。
能否直接把 Python 3.12 升级到 3.15?
次版本是并排安装的,而不是覆盖安装:装完 3.15 后旧版本依然保留,可以单独卸载。新版本中的库需要重新安装,或重新创建虚拟环境。
64 位和 32 位版本有什么区别?
64 位版本可以使用更多内存,适用于所有现代电脑;32 位版本只用于非常老旧的系统。
为什么要有 alpha 和 beta 版本?
它们是下一个版本的预览构建,供测试库和项目使用。学习和工作时只应安装正式发布的版本。