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

URL: https://skillaria.top/zh/guides/python/python-versions

目前仍在维护的是 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 新特性」模块，版本变化会在实践中逐一演示。

## FAQ

**开始菜单里的「IDLE Python 3.10 64-bit」是什么？**

这是安装程序从 python.org 装入的简易开发环境，名称中包含解释器的版本和位数。如果显示 3.10，说明你装的版本即将停止支持，最好改装新版本。

**能否直接把 Python 3.12 升级到 3.15？**

次版本是并排安装的，而不是覆盖安装：装完 3.15 后旧版本依然保留，可以单独卸载。新版本中的库需要重新安装，或重新创建虚拟环境。

**64 位和 32 位版本有什么区别？**

64 位版本可以使用更多内存，适用于所有现代电脑；32 位版本只用于非常老旧的系统。

**为什么要有 alpha 和 beta 版本？**

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


---
Source: Skillaria.Top (https://skillaria.top)
