欢迎光临
我们一直在努力

WinPython Qt5 发行版 3.6.6.1 变更记录全解读:从包索引到 History 的自动生成链路

  • 开发工具
  • 构建工具
  • CLI
  • 包管理器

【免费下载链接】winpython

A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.

项目地址:
https://gitcode.com/gh_mirrors/wi/winpython

点击查看 免费下载

本文以 changelogs/WinPythonQt5-64bit-3.6.6.1_History.md 为骨架,系统梳理 WinPython-64bit 3.6.6.1Qt5 相对上一版 3.6.5.1Qt5 在软件包层面发生的全部变化(13 个新增、61 个升级、3 个移除),并结合仓库中的 wppm.diff 实现与构建脚本,讲清这类 History 文档是如何被自动生成、如何复现验证的。读完本文,你既能完整掌握该版本发行内容的增量全貌,也能直接使用 wppm 的命令行工具对任意两个版本的包索引做自定义对比。

一、一份版本 History 文档记录了什么

在 changelogs 目录下,每个 WinPython 发行版都成对存放两类 Markdown 文件:

  • 包索引:如 changelogs/WinPythonQt5-64bit-3.6.6.1.md,记录该版本"最终包含"的全部工具与 Python 包清单(Tools / Python packages / WheelHouse packages 三大 section);
  • 变更记录(History):如 WinPythonQt5-64bit-3.6.6.1_History.md,记录"与上一个版本相比"发生了哪些增量变化。

本文的主角 WinPythonQt5-64bit-3.6.6.1_History.md 开头即声明:The following changes were made to WinPython-64bit distribution since version 3.6.5.1Qt5.,随后按 New packages / Upgraded packages / Removed packages 三段列出全部差异。每条差异的格式固定为:

* 包名 版本号 (包的一行简介)

其中升级条目会明确写出 旧版本 → 新版本 的迁移箭头,例如:

* [numpy](http://numpy.scipy.org/) 1.14.3+mkl → 1.14.5+mkl
* [spyder](https://pypi.org/project/spyder) 3.2.8 → 3.3.0
* [Python](http://www.python.org/) 3.6.5 → 3.6.6

这份文档实际上不是人工维护的,而是构建流程在打包完成后自动产出的(详见下文第四节)。

二、本版新增的 13 个包

包名版本说明
appdirs 1.4.3 确定平台相关目录(如 "user data dir")的小型 Python 模块
hvplot 0.2.0 面向 pandas、dask、streamz 与 xarray 的高层绘图 API,构建于 HoloViews 之上
intake 0.1.3 数据输入插件与目录(catalog)系统
keras_applications 1.0.2 主流深度学习模型的参考实现
keras_preprocessing 1.0.1 深度学习模型的数据预处理与数据增强工具
keyring 13.2.1 安全地存取密码
msgpack_numpy 0.4.3 基于 msgpack 的 NumPy 数据序列化
msgpack_python 0.5.4+dummy MessagePack(反)序列化器
parambokeh 0.2.2 基于 Parameters 的声明式 Python 编程
pyviz_comms 0.1.1 启动任务、组织输出并剖析结果
pywin32_ctypes 0.1.2 pywin32 的(部分)纯 Python 重实现(基于 ctypes/cffi)
ruamel.yaml 0.15.42 支持往返保留注释、流式风格与键序的 YAML 解析/生成器
spyder_kernels 0.2.4 供 Spyder 控制台使用的 Jupyter 内核

从新增名单可以清晰看出本版的两个补强方向:

  • PyViz 交互可视化家族整体入驻:hvplot、intake、parambokeh、pyviz_comms 与同步升级的 holoviews、bokeh 组成了一套"声明式绘图 + 数据目录 + 交互组件"的完整链条;
  • 深度学习生态补齐:keras 2.1.6 → 2.2.0 后,其模型实现与预处理功能被拆分为独立的 keras_applications、keras_preprocessing 两个子包随发行版一并提供,配套 msgpack_numpy 便于模型/数组数据的序列化交换。

三、本版升级的 61 个包

以下为原文档完整列出的全部升级项,逐一继承如下:

包名版本变化说明
alabaster 0.7.10 → 0.7.11 可配置侧边栏的 Sphinx 主题
altair 2.0.1 → 2.1.0 高层声明式可视化库
astroid 1.6.4 → 1.6.5 由 Python ast 重建抽象语法树(pylint 依赖)
bloscpack 0.11.0 → 0.13.0 Blosc 压缩的命令行接口与序列化格式
bokeh 0.12.16 → 0.13.0 面向统计与新型交互的 HTML 绘图
cvxpy 1.0.3 → 1.0.6 凸优化建模的领域专用语言
dask 0.17.5 → 0.18.1 极简任务调度抽象
datashader 0.6.6 → 0.6.7 基于网格聚合的数据可视化工具链
dill 0.2.7.1 → 0.2.8.2 序列化几乎所有 Python 对象
distributed 1.21.8 → 1.22.0 分布式计算
holoviews 1.10.5a1 → 1.11.0a1 可组合、声明式的数据结构,用于快速构建复杂可视化
idna 2.6 → 2.7 国际化域名(IDNA)支持
ipyleaflet 0.8.1 → 0.9.0 Jupyter 动态 Leaflet 地图组件
ipympl 0.1.1 → 0.2.0 Matplotlib 的 Jupyter 扩展
ipyparallel 6.1.1 → 6.2.2 基于 IPython 的交互式并行计算
ipyscales 0.1.3 → 0.2.2 scales 组件库
jedi 0.12.0 → 0.12.1 文本编辑器的 Python 自动补全工具
joblib 0.11 → 0.12.0 轻量流水线:把 Python 函数作为流水线作业
keras 2.1.6 → 2.2.0 基于 Theano 的深度学习库
llvmlite 0.23.2 → 0.24.0 基本 LLVM 功能的轻量封装
lmfit 0.9.10 → 0.9.11 带边界与约束的最小二乘拟合
loky 2.1.1 → 2.1.4 供 joblib 使用的健壮可复用 Executor
lxml 4.2.1 → 4.2.3 结合 libxml2/libxslt 的 Pythonic XML 处理库
multiprocess 0.70.5 → 0.70.6.1 更好的多进程与多线程
mypy 0.600 → 0.610 Python 可选静态类型检查
numba 0.38.1 → 0.39.0 使用 LLVM 编译 Python 代码
numpy 1.14.3+mkl → 1.14.5+mkl 多维数组处理核心(SciPy 核心模块),随附 MKL 加速
octave_kernel 0.28.3 → 0.28.4 Octave 的 Jupyter 内核
pandas 0.23.0 → 0.23.3 数据分析、时间序列与统计的数据结构
param 1.6.1 → 1.7.0 基于 Parameters 的声明式 Python 编程
parso 0.2.1 → 0.3.0 Python 解析器
pillow 5.1.1 → 5.2.0 Python 图像处理库(fork)
psutil 5.4.5 → 5.4.6 以可移植方式获取进程与系统资源信息
py 1.5.3 → 1.5.4 跨 Python 的 path、ini 解析、io、code、日志工具库
pyct 0.4.2 → 0.4.3 面向用户的 Python 包公共任务(复制示例、抓取数据等)
pylint 1.9.1 → 1.9.2 源码静态分析,查找 bug 与低质量代码迹象
pymongo 3.6.1 → 3.7.0 MongoDB 的 Python 驱动
pyqtgraph 0.10.1.dev2 → 0.11.0.dev0 科学绘图与 GUI 库
pytest 3.6.0 → 3.6.3 简单而强大的 Python 测试框架
Python 3.6.5 → 3.6.6 Python 编程语言及其标准库
python_snappy 0.5.2 → 0.5.3 Google snappy 压缩库的 Python 绑定
pythreejs 1.0.0 → 1.1.0 Jupyter 交互式 3D 图形(基于 Three.js 与 Jupyter widgets)
pytz 2018.4 → 2018.5 世界时区定义
pywin32 223 → 223.1 Python for Windows 扩展
pywinpty 0.5.3 → 0.5.4 winpty 库的 Python 绑定
pyyaml 3.12 → 4.1 YAML 解析与生成器
regex 2018.2.21 → 2018.6.21 替代 re 的增强正则模块
requests 2.18.4 → 2.19.1 人性化的 HTTP 客户端库
rpy2 2.9.3 → 2.9.4 与 R 语言(内嵌 R)互操作
simplejson 3.14.0 → 3.16.0 简单、快速、可扩展的 JSON 编解码器
sortedcontainers 2.0.2 → 2.0.4 SortedList / SortedDict / SortedSet 容器
sphinx_rtd_theme 0.3.1 → 0.4.0 Sphinx 的 ReadTheDocs 主题
sphinxcontrib_websupport 1.0.1 → 1.1.0 Web 应用的 Sphinx API
spyder 3.2.8 → 3.3.0 面向交互式计算与数据可视化的科学 Python 开发环境
sqlalchemy 1.2.8 → 1.2.9 SQL 工具包与对象关系映射器
tables 3.4.3 → 3.4.4 基于 HDF5 的分层数据集管理包
traittypes 0.2.0 → 0.2.1 SciPy trait 类型
urllib3 1.21.1 → 1.23 带线程安全连接池的 HTTP 库
vega 1.1.1 → 1.3.0 Vega / Vega-Lite 的 IPython-Jupyter 组件
winpython 1.10.20180404 → 1.10.20180624 WinPython 发行工具集,含 WPPM 包管理器
xarray 0.10.4 → 0.10.7 N 维带标签数组与数据集

值得注意的升级组合:

  • 科学计算基座整体推进:numpy 1.14.5+mkl、pandas 0.23.3、scipy(索引中为 1.1.0)、numba 0.39.0 构成的基础栈同步更新,保证 MKL 加速与下游生态的兼容性;
  • 交互可视化主线:bokeh 0.13.0、holoviews 1.11.0a1、datashader 0.6.7、ipympl 0.2.0、ipyleaflet 0.9.0、pythreejs 1.1.0 与新增的 PyViz 家族呼应;
  • IDE 架构升级:spyder 3.3.0 配合新增的 spyder_kernels 0.2.4(供 Spyder 控制台使用的 Jupyter 内核),印证了 Spyder 向"客户端 + Jupyter 内核"架构迁移的路线;
  • 发行工具自举更新:winpython 工具包自身从 1.10.20180404 升级到 1.10.20180624,说明 History 文档所依赖的 WPPM 基础设施也在随版本演进。

四、本版移除的 3 个包

包名版本说明
blaze 0.10.1 Blaze 数据处理框架
flask_cors 3.0.4 为 Flask 增加 CORS 支持的装饰器扩展
odo 0.5.0 Python 数据迁移工具

可以推断,blaze 与 odo 的移除与其周边生态的此消彼长直接相关:blaze/odo 所承担的"异构数据迁移"职责,在本版中已逐步由 dask、pandas、pyarrow 等更主流的数据栈替代;而 flask_cors 作为 blaze 生态的辅助依赖也随之退出发行版。移除 3 个包的同时新增/升级大量包,也体现了 WinPython 每个周期"去旧迎新"的发行策略。

五、源码级原理:History 文档是如何自动生成的

这类 _History.md 不是手写的,而是由 wppm/diff.py 在构建阶段自动 diff 出来的。其核心链路分四步:

1. 包行的结构化解析(Package 类)

wppm/diff.py 用两条正则分别匹配 SourceForge 与 Google Code 两种历史行格式:

r"\\[([\\w\\-\\:\\/\\.\\_]+)\\]\\(([^)]+)\\) \\| ([^\\|]*) \\| ([^\\|]*)" # SourceForge
r"\\[([\\w\\-\\:\\/\\.\\_]+) ([^\\]\\ ]+)\\] \\| ([^\\|]*) \\| ([^\\|]*)" # Google Code

匹配成功后拆出 name / url / version / description 四个字段;无法识别的行抛出 Unrecognized package line format 异常,被上层静默跳过。

2. 索引文档的分节读取(PackageIndex 类)

wppm/diff.py 只关心三个 section 头:### Tools、### Python packages、### WheelHouse packages,并跳过表头行(Name | Version | Description、—–|———|————)与空行,最终得到 {"tools": {…}, "python": {…}, "wheelhouse": {…}} 三份以"规范化包名 → Package 对象"为键值的字典。

3. 三段式差异生成(compare_packages)

wppm/diff.py 对旧、新两份索引做集合运算,一次产出本文读到的三大部分:

  • added:新索引有、旧索引没有 → 归入 New packages;
  • upgraded:两边都有但版本号不同 → 归入 Upgraded packages,且强制按 旧版本 → 新版本 书写箭头;
  • removed:旧索引有、新索引没有 → 归入 Removed packages。

若没有任何差异,则输出 No differences found.。

4. 版本定位与标题生成(compare_package_indexes)

wppm/diff.py 负责拼装最终文档:先用 wppm/diff.py 的 changelog_versions 扫描 changelogs 目录,按 WinPython{flavor}-{architecture}bit-{version}.md 命名模式收集全部版本,再用 packaging.version.parse 做 PEP 440 语义比较,找出"严格早于目标版本"的最大版本作为对比基准,最终生成与本文开头完全一致的标题:

## History of changes for WinPython-64bit 3.6.6.1Qt5

5. 与构建流程的集成

在 winpython/build_winpython.py 的 Step 7 中,构建脚本先调用 wppm.Distribution().generate_package_index_markdown()(见 wppm/wppm.py)生成包索引 WinPythonQt5-64bit-3.6.6.1.md 并拷贝进 changelogs 目录,随后调用 diff.compare_package_indexes(…) 生成对应的 _History.md,放在构建输出目录旁供发布者预览。其中 –release-level 会拼入版本名(如 3.6.6.1b1),保证 beta 与正式版各占一份独立文件、互不覆盖。

六、自己动手:用 wppm.diff 复现与自定义对比

即使不重新构建发行版,你也可以用 wppm 提供的命令行工具,对任意两份包索引或任意两个版本号做对比。wppm/diff.py 中内置的用法说明如下:

# 1. 对比两个包索引文件的所有 section(方向无所谓,升级箭头自动为"旧 → 新")
wppm -diff file1.md file2.md
python -m wppm.diff file1.md file2.md

# 2. 只对比指定 section,如只对比 Python 包
python -m wppm.diff file1.md file2.md –section python python

# 3. 对比指定 section 对,如 python↔wheelhouse、tools↔tools
python -m wppm.diff file1.md file2.md –pairs python wheelhouse tools tools

# 4. 按版本号对比(自动从 changelogs 目录读取索引并找到上一版本)
python -m wppm.diff <version2> <version1> [searchdir] [flavor] [architecture]

# 5. 把对比结果写入文件(可选拷贝到 basedir)
python -m wppm.diff –write-changelog <version2> <version1> [searchdir] [flavor] [architecture] [basedir]

针对本文的 Qt5 版本,可以这样复现:

python -m wppm.diff 3.6.6.1 3.6.5.1 changelogs Qt5 64

其中 Qt5 是 flavor 参数,64 是架构参数——它正好匹配 changelogs/WinPythonQt5-64bit-3.6.5.1.md 与 changelogs/WinPythonQt5-64bit-3.6.6.1.md 两份索引的文件名模式。由于升级箭头使用的是 → 字符而 Windows 控制台默认 cp1252 编码,wppm/diff.py 在入口处会对 stdout 做 UTF-8 重配置(errors="replace"),避免"对比两个版本"直接变成编码异常。

七、Qt5 风味的落地:PyQt5 在发行版中的特殊处理

"Qt5" 在 WinPython 版本命名中代表一个风味(flavor)。当前仓库的构建系统以 winpython_builds.toml 中的 [flavors.*] 块定义风味(例如 dot、slim 各自指定 requirements 文件、source_dirs 与 toolsdirs),Qt5 属于历史风味命名,标识该发行版以 PyQt5 作为 Qt 绑定。

在 wppm/wppm.py 的 handle_specific_packages 中,对 pyqt4 / pyqt5 / pyside2 有专门的落地处理:

  • 在包目录与发行版根目录各写入一份 qt.conf,内容为 [Paths] Prefix = . 与 Binaries = .,让 Qt 运行时能按相对路径找到自身资源(保证绿色便携性);
  • 为 PyQt5 生成 pyuic5.bat 启动脚本,内部先 call "%~dp0..\\..\\scripts\\env.bat" 再执行 python.exe -m PyQt5.uic.pyuic,使 .ui 转 .py 工具可在未注册环境的机器上直接使用;
  • 补齐 uic 子目录(Loader、port_v2、port_v3)缺失的 __init__.py,修复导入问题。

这也是理解 3.6.6.1Qt5 索引中 PyQt5 5.9.2、qtpy 1.4.2、qtawesome 0.5.0.dev0、pyqtgraph 0.11.0.dev0 等 Qt 生态包为何能以"免安装、可整体搬移"方式运行的关键。

八、小结

WinPythonQt5-64bit-3.6.6.1_History.md 不仅仅是一份供人阅读的发布说明,它同时是 WinPython 自动化构建体系的一个可验证产物:新增 13 包、升级 61 包、移除 3 包的全部增量,都由 wppm/diff.py 从相邻版本的包索引中机械生成。透过这份文档,你可以同时掌握三层信息:

  • 内容层:本版在 PyViz 可视化、Keras 深度学习、Spyder 内核化、科学计算基座四个方向上的具体版本动向;
  • 格式层:New / Upgraded / Removed 三段式与 旧 → 新 箭头约定的语义;
  • 原理层:如何用 python -m wppm.diff 复现、扩展乃至自定义任意两个 WinPython 版本的包级差异分析,把这套"索引 + 自动 diff"机制迁移到你自己的发行工作流中。
  • 赞

    分享

    • 开发工具
    • 构建工具
    • CLI
    • 包管理器

    【免费下载链接】winpython

    A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.

    项目地址:
    https://gitcode.com/gh_mirrors/wi/winpython

    点击查看 免费下载

    上一篇:
    AMD Ryzen调试工具SMUDebugTool:免费开源硬件调校终极指南

    下一篇:
    如何快速掌握AMD性能调优:SMUDebugTool终极配置指南

    创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

    赞(0)
    未经允许不得转载:171主机测评 » WinPython Qt5 发行版 3.6.6.1 变更记录全解读:从包索引到 History 的自动生成链路
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址