WinPython-64bit 3.11.3.0 版本历史全解读:包更新清单、变更脉络与 changelog 生成机制

原创2026-10-15 20:10:45152 阅读
文章标签:包管理器开发工具CLI构建工具

WinPython-64bit 3.11.3.0 版本历史全解读:包更新清单、变更脉络与 changelog 生成机制

WinPython-64bit 3.11.3.0 是该发行版在 Python 3.11 主线上的一个重要迭代,从 3.11.0.1 升级而来。本文以仓库中的 WinPython-64bit-3.11.3.0_History.md 为主体,完整梳理本次发行新增、升级与移除的软件包,并结合 wppm/diff.py、winpython/build_winpython.py 等源码,讲清楚这类 History 文档是如何自动生成的、它的格式约定是什么,以及普通用户如何用 wppm -diff 自行对比任意两个版本的包清单。读完本文,你既能快速了解 3.11.3.0 相比 3.11.0.1 到底"变了什么",也能掌握 WinPython changelog 体系的读写与复用方法。

一、这份文档是什么:History 文档在 changelog 体系中的位置

在仓库的 changelogs 目录中,每一个 WinPython 版本都有两类文档:

  • 包索引(Package Index):如 WinPython-64bit-3.11.3.0.md,以 Markdown 表格形式列出该版本发行包内的全部工具与 Python 包及其版本、描述,是"某版本装了什么"的完整快照。
  • 版本历史(History):如本文主体 WinPython-64bit-3.11.3.0_History.md,记录的是"自上一个版本以来发生了什么",即对前后两个包索引做差异对比后的结果,按 New packages(新增)、Upgraded packages(升级)、Removed packages(移除) 三类罗列。

从 wppm/diff.py 的实现可以确认:compare_packages() 先把两个索引中的包名统一为小写并以下划线替换连字符(k.replace("-", "_").lower()),再分别求出:

  • added:新索引中有而旧索引中没有的包;
  • upgraded:两索引都有但版本号不同的包,输出格式固定为 旧版本 → 新版本;
  • removed:旧索引中有而新索引中没有的包。

本份 3.11.3.0 History 文档的基准版本正是 3.11.0.1,标题行 "The following changes were made to WinPython-64bit distribution since version 3.11.0.1" 由 wppm/diff.py 的 compare_package_indexes() 自动生成,其比较方向是"旧 → 新",升级行一律写成 旧 → 新 形式,避免读者将比较方向弄反时把升级误读为降级。

1.1 History 文档与索引文档的命名约定

  • 索引文档命名:WinPython{flavor}-{arch}bit-{version}.md,如 WinPython-64bit-3.11.3.0.md(无 flavor 时即标准发行版);
  • History 文档命名:WinPython{flavor}-{arch}bit-{version}_History.md,如 WinPython-64bit-3.11.3.0_History.md。

winpython/build_winpython.py 中通过 mdn 与 out 两个变量分别构造这两类文件名。命名规则在测试 tests/test_changelog_files.py 中被固定下来:解析器只接受真正的包索引名,_History.md 等伴随文件会被明确拒绝——History 不是一份独立索引,它只是"前后两个索引的差异视图"。

1.2 为什么 History 文档不进入正式发布归档

仓库测试 tests/test_changelog_files.py 的模块注释与 winpython/build_winpython.py 的注释给出了明确的设计取舍:History 是写给正在构建发行版的人看的(发布前检查本次构建相比上一次移动了哪些包),因此它只生成在构建输出目录旁,不会被复制进 changelogs/ 归档。原因在于:

flavors(如 slim、dot)在不同发布周期之间时有时无,且普通用户大约一年才升级一次,与"紧邻上一版本"的对比对读者没有持续价值。读者真正需要的是"自己任选两个版本/两个 flavor 进行对比",这由 wppm -diff 提供。

这与本文档实际所在位置并不矛盾——当前仓库是开发与构建工具链仓库,保留了较早期周期的历史文档;而这一生成逻辑正是理解本份 History 文档由来的关键。

二、3.11.3.0 相比 3.11.0.1 的完整变更清单

本节完整继承 History 文档的全部条目,并适当归类说明,便于快速检索。

2.1 工具(Tools)升级

本次发行随附的外部工具做了两个升级,均服务于 JavaScript/前端生态:

工具 原版本 新版本 说明
Nodejs v16.16.0 v18.16.0 基于 Chrome V8 引擎的 JavaScript 运行时
npmjs 8.11.0 9.5.1 JavaScript 包管理器

Node.js 从 16 LTS 线跨入 18 线,npm 同步跟进到 9.x,意味着 JupyterLab 前端扩展、jupyterlab-risize 幻灯片、基于 Node 的构建工具等都会在新版本环境中运行。

2.2 新增的 Python 包(New packages)

3.11.3.0 一次性引入了 100+ 个新包,覆盖深度学习、贝叶斯统计、凸优化、地理可视化、NLP、Jupyter 协作等多个方向。以下按技术领域分组列出(包名与版本号均来自 History 文档,括号内为官方描述摘要):

深度学习与 PyTorch 生态

  • accelerate 0.19.0(Accelerate,Hugging Face 的训练加速库)
  • botorch 0.8.5(基于 PyTorch 的贝叶斯优化)
  • gpytorch 1.10(PyTorch 中的高斯过程实现)
  • linear_operator 0.4.0(有限维正定算子线性代数实现,gpytorch 的底层依赖)
  • torch 2.0.1(张量与动态神经网络,GPU 加速)
  • torchaudio 2.0.2(PyTorch 音频处理包)
  • torchvision 0.15.2(图像/视频数据集与模型)
  • fastai 2.7.12(让 PyTorch 深度学习更快、更准、更简单)
  • fastcore 1.5.11、fastdownload 0.0.7、fastprogress 1.0.3(fastai 生态组件)
  • transformers 4.29.1(面向 JAX/PyTorch/TensorFlow 的 SOTA 机器学习库)
  • tokenizers 0.13.3(快速可定制的分词器)
  • huggingface_hub 0.14.1(HF Hub 的下载/发布客户端)
  • openai 0.27.5(OpenAI API 的 Python 客户端)
  • opt_einsum 3.3.0(优化 numpy 的 einsum 函数)
  • numba 0.57.0(基于 LLVM 编译 Python 代码)与 llvmlite 0.40.0

贝叶斯统计与 MCMC

  • arviz 0.15.1(贝叶斯模型探索性分析)
  • pymc 5.3.0(马尔可夫链蒙特卡洛采样工具箱)
  • pytensor 2.11.2(数学表达式的 CPU/GPU 优化编译器,PyMC 的符号计算后端)
  • pyro_api 0.1.2、pyro_ppl 1.8.4(Pyro 概率编程库)
  • xarray_einstats 0.5.1(xarray 上的统计/线性代数/einops)

凸优化与数值求解

  • cvxopt 1.3.0(凸优化包)
  • cvxpy 1.3.1(凸优化问题的领域特定语言)
  • ecos 2.0.12(嵌入式锥求解器)
  • osqp 0.6.2.post9(算子分裂 QP 求解器)
  • qdldl 0.1.7(LDL 分解例程)
  • quadprog 0.1.11(二次规划求解器)
  • scs 3.2.3(分裂锥求解器)
  • qpsolvers 3.1.0(统一 API 的二次规划求解器集合)

地理空间与可视化

  • cartopy 0.21.1(带 Matplotlib 支持的地图绘制库)
  • geoviews 1.10.0a2.post4+g65df916(地理/气象/海洋数据集可视化)
  • pyshp 2.3.0(ESRI Shapefile 纯 Python 读写)
  • datashader 0.14.5a1+g7a97e97.dirty(基于网格聚合的数据可视化工具链)
  • datashape 0.5.2(数据描述语言)
  • spatialpandas 0.4.7(空间/几何操作的 pandas 扩展数组)
  • umap_learn 0.5.1(UMAP 降维)、pynndescent 0.5.7(最近邻下降)

NLP 与 spaCy 生态

分布式计算与数据

  • dask_ml 2023.3.24(分布式/并行机器学习)、dask_glm 0.2.0(Dask 广义线性模型)
  • pyarrow 12.0.0(Apache Arrow 的 Python 库)
  • feather_format 0.4.1(基于 Arrow 的 Feather 文件格式封装)
  • h5netcdf 1.1.0(通过 h5py 读写 netCDF4)
  • smart_open 5.2.1(流式读取 S3/HDFS/GCS/Azure Blob 等大文件)

Jupyter 生态(含协作编辑与幻灯片)

Web / API / 认证 / 数据访问

Markdown / 文档工具链

其他实用工具

2.3 升级的 Python 包(Upgraded packages,节选核心)

History 文档共记录约 90 个升级包,这里列出对科学计算与开发体验影响最大的部分,完整列表见原文档:

包 原版本 新版本
Python 3.11.0 3.11.3(CPython 3.11 补丁版)
numpy 1.23.4 1.24.2
pandas 1.5.1 1.5.2
scipy 1.9.3 1.10.1
matplotlib 3.6.0 3.7.1
scikit_learn 1.1.3 1.2.2
scikit_image 0.19.3 0.20.0
seaborn 0.12.1 0.13.0.dev0
statsmodels 0.13.2 0.14.0
sympy 1.11.1 1.12
dask 2022.10.1 2023.5.0
distributed 2022.10.1 2023.5.0
bokeh 2.4.3 3.1.1(跨大版本)
dash 2.6.2 2.8.1
panel 0.14.1 1.0.2(跨大版本)
plotly 5.11.0 5.13.1
polars 0.14.22 0.17.11
duckdb 0.5.2.dev1339 0.8.0
geopandas 0.12.1 0.13.0
shapely 1.8.5.post1 2.0.1(跨大版本)
xarray 2022.10.0 2023.4.2
fastapi 0.85.1 0.95.1
starlette 0.20.4 0.26.1
uvicorn 0.19.0 0.20.0
networkx 2.8.7 3.1(跨大版本)
pyarrow — 12.0.0(新增见上)
ipython 7.32.0 8.13.1(跨大版本)
jupyterlab 3.5.0 3.6.3
jupyter_server 1.21.0 2.5.0(跨大版本)
jupyter_client 7.3.4 8.2.0(跨大版本)
jupyter_core 4.11.2 5.3.0(跨大版本)
ipykernel 6.16.2 6.22.0
spyder 5.3.3 5.4.3
spyder_kernels 2.3.3 2.4.3
pyzo 4.12.4.dev0 4.12.7
black 22.10.0 23.3.0
mypy 0.982 1.3.0
pytest 7.1.1 7.2.1
pip 22.3 23.1.2
setuptools 65.5.0 67.7.2
pywin32 304.0 305
pythonnet 3.0.0rc1 3.0.1
python_lsp_server 1.5.0 1.7.2
cryptography 3.4.7 37.0.4
sqlalchemy 1.4.42 1.4.47
sphinx 5.3.0 6.1.3
winpython 5.1.20221030 6.1.20230518(WinPython 发行工具本身,含 WPPM)

2.4 移除的 Python 包(Removed packages)

本次发行移除了 15 个包,其中多数是因为功能被替代或上游停止维护:

  • altair_widgets 0.2.2(Altair 交互式可视化组件)
  • dask_labextension 5.3.0(Jupyter 扩展中管理 Dask 集群,已被 JupyterLab 原生集成取代)
  • flask_compress 1.13(Flask gzip 压缩)
  • great_expectations 0.14.11(数据质量期望框架)
  • jsonpatch 1.32(RFC 6902 JSON 补丁)
  • jupyter_lsp 1.5.1、jupyterlab_lsp 3.10.2(LSP 集成)
  • jupyter_server_proxy 3.2.1、simpervisor 0.4(Jupyter 服务代理及配套进程监督器)
  • palettable 3.3.0(配色板)
  • pdvega 0.2.1.dev0(pandas → Vega 绘图接口,长期未维护)
  • py 1.11.0(跨版本工具库,pytest 7.2 起已不再依赖)
  • rise 5.7.1(Reveal.js 幻灯片扩展,被新增的 jupyterlab_rise 取代)
  • tomli 2.0.1(TOML 解析器,Python 3.11 标准库已内置 tomllib)
  • vega 3.6.0(Vega widget)

三、这份 History 是如何生成的:源码级拆解

理解了清单内容之后,值得看看它背后的生成链路,这也是 WinPython 构建工具链中"生成 changelog"的标准步骤。

3.1 构建流水线中的 Step 7

在 winpython/build_winpython.py 中,"generate changelog" 是构建流水线的第 7 步,分两个子步骤:

  1. 生成包索引:调用 wppm.Distribution().generate_package_index_markdown(),把当前构建产物的完整包清单写成 WinPython{flavor}-{arch}bit-{version}.md,并复制进 changelogs 目录;
  2. 生成 History:调用 wppm.diff.compare_package_indexes(version, searchdir=changelog_dir, flavor=..., architecture=...),自动从 changelogs/ 中找到紧邻的上一个版本索引,做差异对比后写出 _History.md,但保留在构建输出目录旁,不进归档。

注意第 316 行的注释:changelog_version = f"{winpyver2}{args.release_level}"——发布级别(如 b1)必须写进文件名,否则一个 beta 与它转正后的正式版共享同一个 winpyver2,beta 的包清单会覆盖正式版的索引文件。

3.2 "上一个版本"如何确定

winpython/build_winpython.py 委托 wppm/diff.py 的 find_previous_version():它遍历 changelogs/ 中所有 WinPython{flavor}-{arch}bit-{version}.{txt|md} 文件,用 PEP 440 版本解析器对文件名中的版本号排序,选出"小于目标版本的最大版本"。

由 tests/test_diff_versions.py 可见该逻辑已被测试严格约束:

  • 带发布级别的版本(如 3.14.7.1b1)会被正确识别并参与排序(b1 位于 .0 与 .1 之间);
  • _History.md 伴随文件永远不会被选为"上一版本";
  • 不同 flavor 之间互不干扰(dot 不对比 slim),且 dot 不会错误匹配 dotf;
  • 没有更早版本时,回退为"与自身对比",得到空差异。

3.3 差异文档的格式约定

compare_package_indexes() 拼装出的最终文档就是本文档的模板:

## History of changes for WinPython-{arch}bit {version}{flavor}
The following changes were made to WinPython-{arch}bit distribution since version {prev}{flavor}.

### Tools / ### Python packages
New packages: ...
Upgraded packages: ...  (旧版本 → 新版本)
Removed packages: ...

其中 Tools 与 Python packages 两个区块分别调用 compare_markdown_sections() 完成对比,升级行的箭头方向恒为"旧 → 新"。

四、读者视角:如何用 wppm -diff 做任意版本对比

既然 History 文档不再随发布归档,那么普通用户如何比较两个版本的差异?答案是 WPPM 自带的 -diff 命令。相关入口在 wppm/wppm.py:

python -m wppm -diff WinPythonslim-64bit-3.13.5.0.md WinPythonslim-64bit-3.14.7.0.md

该命令接受任意两个索引文档(不要求相邻版本、不要求同一 flavor),比较方向由参数顺序决定,内部调用 compare_files(),支持三种模式:

模式 说明
full 对比 Tools、Python packages、WheelHouse packages 全部区块
section 只对比指定的某一区块(header1/header2 指定)
pairs 按给定的区块对逐一对比

文件读取时使用 utils.guess_encoding() 自动探测编码,兼容仓库内新旧 changelog(早期 .txt 与后期 .md 并存)。你可以用它验证本文档内容,例如:

python -m wppm -diff changelogs/WinPython-64bit-3.11.0.1.md changelogs/WinPython-64bit-3.11.3.0.md

输出将复现本 History 文档中的 New / Upgraded / Removed 三类清单。

五、3.11.3.0 版本的技术要点与升级建议

综合上面的清单,可以从几个维度总结本次版本的特点:

  1. Python 3.11.3 补丁基线:CPython 自 3.11.0 升级到 3.11.3,属于 3.11 稳定线上的安全与缺陷修复版本;同时 tomli 被移除正是利用了 3.11 标准库内置 tomllib 的事实(构建脚本 build_winpython_meta.py 也注明"stdlib since 3.11")。
  2. 深度学习栈的一次性补强:PyTorch 2.0.1 全家桶(torch/torchvision/torchaudio)、transformers、accelerate、fastai、numba + llvmlite 同时就位,3.11.3.0 开箱即可跑主流深度学习训练与推理流程。
  3. Jupyter 生态向协作与新一代协议演进:jupyter_server 2.x、jupyter_client 8.x、jupyter_core 5.x 集体跨大版本;新增基于 Y-CRDT 的 ydoc/ypy 协作栈;用 jupyterlab_rise 取代 rise 承担幻灯片功能。
  4. 可视化与地理空间能力增强:bokeh 3.x、panel 1.x 跨大版本升级,cartopy、geoviews、datashader、spatialpandas、pyproj、shapely 2.0 补齐了地理数据从读取到渲染的整条链路。
  5. 优化与贝叶斯计算完整覆盖:cvxpy + 多求解器(ecos/osqp/scs/qdldl/quadprog)、pymc + pytensor、pyro、arviz 构成从凸优化到贝叶斯推断的完整工具链。

升级建议:如果你正在使用 3.11.0.1 及更早版本,升级到 3.11.3.0 可获得以上全部新增与修复;如果不需要 bokeh 3.x / panel 1.x / shapely 2.0 等跨大版本带来的 API 变化,可先查阅对应包的迁移说明再升级。

六、延伸阅读


登录后查看全文
winpython