page contents

Python 3.15 来了:告别 3.10,我终于能用上 3.11

Python 3.15 正式发布,本文由 Simon Willison 带你速览最值得关注的新特性:显式惰性导入(PEP 810)、推导式中的解包语法,以及标准库内置的全新采样分析器 Tachyon。随着 3.15 发布,Python 3.10 正式退出支持,作者也借机拥抱从 3.11 起引入的一系列实用功能,并分享了用 uv 升级到 3.15 的实操步骤。

attachments-2026-10-MyGjwZnA6aced9fdac587.pngPython 3.15 正式发布,本文由 Simon Willison 带你速览最值得关注的新特性:显式惰性导入(PEP 810)、推导式中的解包语法,以及标准库内置的全新采样分析器 Tachyon。随着 3.15 发布,Python 3.10 正式退出支持,作者也借机拥抱从 3.11 起引入的一系列实用功能,并分享了用 uv 升级到 3.15 的实操步骤。

你好 Python 3.15,再见 3.10,现在我能用上 3.11 了

2026 年 10 月 12 日

Python 3.15 来啦!下面是官方《Python 3.15 新特性》指南的精华版,今年由 3.14 和 3.15 的发布经理 Hugo van Kemenade 整理。作为一个要让开源软件在每个受支持的 Python 版本上都能跑的人,我终于可以跟 Python 3.10 说再见,并开始用上从 Python 3.11 起引入的特性了。

先来看看 Python 3.15 的一些亮点。

显式惰性导入

最让我兴奋的是 PEP 810 带来的「显式惰性导入」(Explicit lazy imports)。你可以这样导入模块:

lazy import json
lazy from pathlib import Path

这些模块会在后续代码中首次用到这些符号时才真正被导入。

我的 LLM 命令行工具支持插件机制。我不得不在插件作者文档里建议大家手动做惰性导入,因为只要安装了用到 sentence_transformers 这类重型依赖的插件,每次运行 llm 命令都会凭空多出好几秒启动时间。惰性导入正好解决了这个启动开销问题。

推导式中的解包

新的 [*sublist for sublist in lists] 解包语法很巧妙。下面这段摘自官方文档的示例:

lists = [[1, 2], [3, 4], [5]]
[*L for L in lists]
# [1, 2, 3, 4, 5]
# equivalent to [x for L in lists for x in L]

sets = [{1, 2}, {2, 3}, {3, 4}]
{*s for s in sets}
# {1, 2, 3, 4}
# equivalent to {x for s in sets for x in s}

dicts = [{'a': 1}, {'b': 2}, {'a': 3}]
{**d for d in dicts}
# {'a': 3, 'b': 2}
# equivalent to {k: v for d in dicts for k,v in d.items()}

PEP 798: Unpacking in Comprehensions(作者 Adam Hartz 和 Erik Demaine)将它提议为 PEP 448 解包语法的扩展——后者早在 2015 年的 Python 3.5 中就已落地。

一个采样分析器

Python 原有的追踪式分析器已从 cProfile 更名为 profiling.tracing,此外还迎来了一个令人兴奋的全新采样分析器 Tachyon,也就是 profiling.sampling。

采样分析器的工作方式是:定期从运行中的进程抓取调用栈快照,再据此计算哪些函数内部耗费的时间最多。它的开销极低,无需预先对系统进行插桩,就能深入洞察运行中的系统。

我之前一直用 py-spy 这类工具来做这件事。现在,这项能力已经内置进标准库了。

如果你有一个正在运行的 Python 3.15 进程的 PID,可以用下面这条命令开始采集样本(在 macOS 上我需要用 sudo):

sudo uv run --python 3.15 python -m profiling.sampling attach 1234

跟主程序交互一会儿,然后按 Ctrl+C 停止采集并查看报告,大致长这样:

attachments-2026-10-J6c94FgE6aced9ccd9cde.png

它还能生成火焰图、热力图,甚至可以输出一种能在 Firefox 分析器界面中查看的格式。

3.15 比 3.14 快不了多少

前两天 Miguel Grinberg 针对 3.15.0rc3 发布版探究了「Python 3.15 到底有多快」,发现性能基本与 3.14 持平,唯一的例外是实验性 JIT。那套 JIT 相比标准 3.15 解释器带来了 1.2 倍的提升(在斐波那契测试中),这也是 Miguel 首次观察到 JIT 带来有意义的性能提升。

去年 Miguel 对 3.14 的探究发现,相比 Python 3.13,在更多类别上都有显著提升。

用 uv 升级到 Python 3.15

我在 Mac 上用下面这组命令让 uv 用上 Python 3.15。首先我得先把 uv 自身升级,确保它知道这个新版本:

uv self update

接着安装稳定的 3.15 发布版:

uv python install 3.15

然后告诉 uv,除非项目自己锁定了别的版本,否则所有 uv run 命令默认都用它:

uv python pin --global 3.15

现在下面这条命令会报告 3.15 版本:

uv run python --version

我已经用 uv tool install 装了一堆工具。我像下面这样重新安装它们以使用 Python 3.15:

uv tool upgrade datasette --python 3.15

然后可以这样确认版本:

datasette --get /-/versions.json | jq

Python 3.11 亮点回顾

3.15 的发布意味着 2021 年发布的 Python 3.10 正式不再受支持。

我对自己的主要开源项目的策略是:让它们能在每一个受支持的 Python 版本上正常工作。现在我可以放弃 3.10,并开始使用 3.11 中引入的特性了。

这是《Python 3.11 新特性》文档。我终于可以放心依赖 tomllib 已经可用了!

Datasette 大量使用了 asyncio。3.11 新增了 TaskGroup 和 timeout(),以及若干其他新特性。

datetime.UTC 是 3.11 新增的 datetime.timezone.utc 别名。

Python 对 SQLite 的支持在 3.11 中得到了显著升级,包括:

setlimit() 和 getlimit() 暴露了从 Python 设置 SQLite 运行时限制的机制。

create_window_function() 让我们能用 Python 创建自定义窗口函数,它继承自带 step()、value()、inverse() 和 finalize() 方法的类。

blobopen() 提供了一种高效机制,用于对存储在 SQLite 行中的大型 BLOB 二进制值进行部分读写。

现在你可以调用 set_authorizer(None) 来移除一个 SQLite 授权器。Datasette 之前为此做了一个变通方案!

此外还有一大堆对 Python 类型系统的改进。

我计划在未来几周为我的多个项目加入 Python 3.11 的改进。这是我第一个移除那个 set_authorizer(None) 变通方案的 Datasette PR。

我还更新了我的 click-app、datasette-plugin、python-lib 和 llm-plugin cookiecutter 模板,让它们对从 Python 3.11 到 3.15 的版本进行测试。

发布于 2026 年 10 月 12 日下午 6:15 · 在 Mastodon、Bluesky、Twitter 上关注我,或订阅我的新闻通讯

本文《Hello Python 3.15, goodbye 3.10, and now I can use 3.11》由 Simon Willison 发布于 2026 年 10 月 12 日。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

 

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

2484 篇文章

作家榜 »

  1. Pack 2484 文章
  2. 轩辕小不懂 2403 文章
  3. 小柒 2228 文章
  4. Nen 576 文章
  5. 王昭君 216 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章