基础

Python 版本:Python 2 与 3 的区别、3.10–3.15 的新特性,以及该安装哪个版本

更新于: · Skillaria.Top

目前仍在维护的是 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 2Python 3
打印print "hi" — 语句print("hi") — 函数
字符串默认是字节,Unicode 写作 u"..."str 始终是 Unicode,字节是 bytes
除法7 / 2 得到 37 / 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.72010 年2020 年 1 月不再支持
3.92020 年 10 月2025 年 10 月不再支持
3.102021 年 10 月2026 年 10 月支持即将结束
3.112022 年 10 月2027 年 10 月仅安全修复
3.122023 年 10 月2028 年 10 月仅安全修复
3.132024 年 10 月2029 年 10 月错误修复
3.142025 年 10 月2030 年 10 月错误修复
3.152026 年 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 版本?

它们是下一个版本的预览构建,供测试库和项目使用。学习和工作时只应安装正式发布的版本。

通过视频学习本主题

课程“Python 3.15: от новичка до профи”结合实践详细讲解了这一主题。

前往课程