2026/10/16 5:33:33

WinPython Zero 发行版 3.7.4.1(32bit)变更日志解读:从 History 文件看 Python 包的升级脉络

WinPython Zero 发行版 3.7.4.1(32bit)变更日志解读:从 History 文件看 Python 包的升级脉络 开发工具构建工具CLI包管理器【免费下载链接】winpythonA free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.项目地址https://gitcode.com/gh_mirrors/wi/winpython点击查看免费下载本文以 WinPython 仓库中的 WinPythonZero-32bit-3.7.4.1_History.md 为核心素材系统解读 WinPython 32bit 3.7.4.1 Zero 发行版相对上一版本的全部包级变更新增与升级并结合同版本软件包索引、上一版本历史以及wppm包管理器生成/对比该类文档的源码实现说明这类_History.md文件是如何被程序化生成、其行文格式的底层规则以及读者如何自行复现“两个发行版之间的差异分析”。一、WinPython Zero 发行版与 3.7.4.1 的版本脉络WinPython 是面向 Windows 平台的便携式 Python 发行版将 CPython 与一批预编译科学计算包打包在一起。历史发行版按“风味flavor 架构 版本号”命名例如本主题对应的文件名为WinPythonZero-32bit-3.7.4.1其中Zero是当时该构建所采用的风味名称类似当前仓库中 winpython_builds.toml 所定义的dot、slim、dotf、slimf等风味不同风味对应不同的包集合与工具目录32bit表示发行版架构为 32 位3.7.4.1是 WinPython 自身的版本号其含义可理解为Python 3.7.4基础上的第 1 次构建。从 winpython/make.py 的winpython_version_name属性可以看到WinPython 的完整版本字符串由{python_full_version}.{build_number}{flavor}{release_level}拼接而成即“Python 完整版本号 构建号 风味名 发布级别”这与3.7.4.1Zero的命名结构完全对应。在变更时间线上3.7.4.1 Zero的上一个版本是3.7.4.0 Zero。对照 3.7.4.0 的历史文件 可知3.7.4.0相对更早的3.7.2.0曾一次性完成了 Python 3.7.2 → 3.7.4 的运行时升级以及 cloudpickle、dask、jedi、pip、qtpy、setuptools、wheel、winpython 工具包等十余个包的批量升级还引入了 pycosatSAT 求解器绑定。因此3.7.4.1是在全新 Python 3.7.4 基座上的第二次增量迭代变更量相对收敛。二、核心变更内容1 个新包 9 个升级包本节的全部数据均直接来自 WinPythonZero-32bit-3.7.4.1_History.md是其“New packages / Upgraded packages”两部分的完整继承。2.1 新增包fsspec 0.4.43.7.4.1 Zero仅引入了一个全新包包名版本说明fsspec0.4.4File-system specification文件系统抽象规范fsspec 为本地文件系统、远程存储等各类数据源提供统一的 Python 文件接口抽象其引入与本发行版中 dask 的升级方向一致——dask 的分布式/惰性计算通常需要统一的文件访问层来读写分块数据。2.2 升级包清单包名原版本新版本说明dask2.1.02.4.0Minimal task scheduling abstraction最小任务调度抽象jedi0.14.00.15.1An autocompletion tool for Python that can be used for text editorsPython 自动补全工具parso0.5.00.5.1A Python ParserPython 语法解析器pip19.1.119.2.3A tool for installing and managing Python packagesPython 包安装与管理工具pyodbc4.0.264.0.27DB API Module for ODBCODBC 数据库 API 模块qtpy1.8.01.9.0Provides an abstraction layer on top of the various Qt bindings (PyQt5, PyQt4 and PySide) and additional custom QWidgetsQt 绑定抽象层setuptools41.0.141.2.0Download, build, install, upgrade, and uninstall Python packagesPython 包构建与分发工具集wheel0.33.40.33.6A built-package format for Pythonwheel 构建包格式winpython2.0.201907052.1.20190921WinPython distribution tools, including WPPM (package manager)WinPython 发行工具含 WPPM 包管理器从整体结构看这批升级覆盖了发行版的四条支撑线数据处理线dask 2.1.0 → 2.4.0配合新增的 fsspec强化了并行/惰性计算与统一文件访问能力编辑器/补全线jedi 0.14.0 → 0.15.1 与 parso 0.5.0 → 0.5.1 同步升级parso 正是 jedi 所依赖的解析器两者版本配套前进包管理线pip 19.1.1 → 19.2.3、setuptools 41.0.1 → 41.2.0、wheel 0.33.4 → 0.33.6三者构成“安装器 构建器 打包格式”的完整工具链升级数据库与桌面线pyodbc 4.0.26 → 4.0.27ODBC 数据访问、qtpy 1.8.0 → 1.9.0Qt 绑定抽象层后者为基于 PyQt5/PySide 的桌面应用提供兼容层。值得注意的还有winpython 工具包从 2.0.20190705 升级到 2.1.20190921。该包即 WinPython 发行工具含 WPPM——WinPython Package Manager其实现对应本仓库的 wppm/ 目录也就是说这份发行版自带的包管理器版本在本次迭代中完成了跨大版本的更新这也直接关系到底下第三节介绍的变更日志生成能力。2.3 该版本发行版的完整软件包索引为了更完整地呈现 3.7.4.1 Zero 的实际构成此处给出同版本软件包索引中的全部 Python 包Tools 一节为空包名版本说明Python3.7.4Python programming language with standard librarybrotli1.0.7Python binding of the Brotli compression librarycloudpickle1.2.1Extended pickling support for Python objectsdask2.4.0Minimal task scheduling abstractiondocopt0.6.2Pythonic argument parser, that will make you smilefsspec0.4.4File-system specificationidlex1.18IDLE Extensions for Pythonjedi0.15.1An autocompletion tool for Python that can be used for text editorsjoblib0.13.2Lightweight pipelining: using Python functions as pipeline jobslocket0.2.0File-based locks for Python for Linux and Windowsparso0.5.1A Python Parserpartd1.0.0Appendable key-value storagepip19.2.3A tool for installing and managing Python packagesprompt_toolkit2.0.9Library for building powerful interactive command lines in Pythonptpython2.0.4Python REPL build on top of prompt_toolkitpycosat0.6.3bindings to picosat (a SAT solver)pygments2.4.2Generic syntax highlighter for general use in all kinds of softwarepyodbc4.0.27DB API Module for ODBCpython_snappy0.5.4Python library for the snappy compression library from Googlepythonnet2.4.0.Net and Mono integration for Pythonqtpy1.9.0Qt bindings abstraction layersetuptools41.2.0Download, build, install, upgrade, and uninstall Python packagessix1.12.0Python 2 and 3 compatibility utilitiessqlite_bro0.9.1a graphic SQLite Client in 1 Python filetoolz0.10.0List processing tools and functional utilitieswcwidth0.1.7Measures number of Terminal column cells of wide-character codeswheel0.33.6A built-package format for Pythonwinpython2.1.20190921WinPython distribution tools, including WPPM (package manager)从索引中可以看到该发行版以 Dask 数据处理栈dask、fsspec、partd、locket、toolz、cloudpickle、joblib为核心特色同时内置 ptpython/prompt_toolkit交互式 REPL、pythonnet.NET 互操作、pyodbcODBC 数据库与 sqlite_broSQLite 图形客户端是一个面向数据处理场景的 32 位精简发行版。三、这类 _History.md 文件是如何生成的wppm.diff 的源码实现WinPythonZero-32bit-3.7.4.1_History.md不是手写文档而是 WinPython 工具链程序化对比两个版本索引后生成的产物。生成逻辑位于 wppm/diff.py核心链路如下3.1 索引文件的行格式解析每个版本的完整包索引如 WinPythonZero-32bit-3.7.4.1.md本质上是一份结构化 Markdown以### Tools、### Python packages、### WheelHouse packages分节见diff.py中PackageIndex.HEADERS的定义每行包的格式为name | version | description。Package类通过正则\[([\w\-\:\/\.\_])\]\(([^)])\) \| ([^\|]*) \| ([^\|]*)解析每一行wppm/diff.py得到名称、URL、版本与描述四个字段。3.2 差异计算New / Upgraded / Removed 三段式compare_packageswppm/diff.py以包名标准化为小写并替换-为_为键做新旧两个索引的集合比较输出三个段落New packages仅出现在新索引中的包格式为* {name} {version} ({description})Upgraded packages两个索引都有但版本不同的包格式为* {name} {old_version} → {new_version} ({description})Removed packages仅出现在旧索引中的包。3.7.4.1 的历史文件没有出现“Removed packages”段说明本次迭代没有移除任何包这与 3.7.4.0 的历史文件 的格式完全一致——都是“New packages Upgraded packages”两段。3.3 文件头与落盘compare_package_indexes / write_changelogcompare_package_indexeswppm/diff.py负责生成历史文件的开头## History of changes for WinPython-{architecture}bit {version2 flavor} The following changes were made to WinPython-{architecture}bit distribution since version {version1 flavor1}.对照本文关联文档version2 flavor即3.7.4.1 Zeroversion1 flavor1即3.7.4.0 Zero。而write_changelogwppm/diff.py最终把结果写入changelogs/WinPython{flavor}-{architecture}bit-{version2}_History.md——这正是WinPythonZero-32bit-3.7.4.1_History.md的命名来源。其中“上一个版本”由find_previous_version根据 changelogs 目录中的文件名解析得出wppm/diff.py它只比较同一风味、同一架构下的版本不会跨 flavor 或跨 32/64 位去对比。3.4 一个实现细节升级箭头与 Windows 编码历史文件中升级行使用→箭头如2.1.0 → 2.4.0。在 wppm/diff.py 与 wppm/wppm.py 的入口处都显式执行了sys.stdout.reconfigure(encodingutf-8, errorsreplace)——因为 Windows 控制台默认代码页是 cp1252如果不强制 UTF-8打印“升级箭头”时会把整次对比变成 traceback。这一细节解释了为什么该历史文件中的箭头能正确呈现也提示任何在 Windows 下复现 diff 输出时都要关注编码。四、实战自行复现两个发行版之间的差异虽然仓库中已归档了_History.md历史文件但wppm提供了更灵活的对比方式——任意选择两个包索引文件做差异分析。这正是 wppm/wppm.py 中-diff参数的用途其帮助文本明确指出任何两个发行版或风味都可以对比无需是相邻版本。例如在仓库根目录执行# 对比 3.7.4.1 与 3.7.4.0 两个 Zero 32bit 版本结果即本文关联文档的内容 wppm -diff changelogs/WinPythonZero-32bit-3.7.4.1.md changelogs/WinPythonZero-32bit-3.7.4.0.md # 等价形式不安装 wppm直接用模块运行 python -m wppm.diff changelogs/WinPythonZero-32bit-3.7.4.1.md changelogs/WinPythonZero-32bit-3.7.4.0.md # 也可以只对比某个分节如仅对比 Python packages 节 python -m wppm.diff changelogs/WinPythonZero-32bit-3.7.4.1.md changelogs/WinPythonZero-32bit-3.7.4.0.md --section python pythondiff.py支持的三种模式见其print_usagewppm/diff.py模式命令形式用途full默认wppm -diff a.md b.md对比两个索引的全部三个分节Tools / Python packages / WheelHousesectionpython -m wppm.diff a.md b.md --section h1 h2只对比指定分节pairspython -m wppm.diff a.md b.md --pairs h1a h2a [h1b h2b ...]按指定分节对逐一对比版本模式python -m wppm.diff version2 version1 [searchdir] [flavor] [architecture]按版本号从 changelogs 目录读取对比写文件模式python -m wppm.diff --write-changelog version2 version1 ...将对比结果写入_History.md并可选复制到目标目录此外wppm -mdwppm/wppm.py可以从目标 Python 发行版直接生成 Markdown 格式的包索引-md配合-ws还可对比“已安装包”与“WheelHouse 收录包”两个集合compare_markdown_sections(default, compare, python, wheelhouse, ...)是构建期生成这类索引文件的底层能力。相关回归测试见 tests/test_distribution.py验证-md读取的是目标发行版而非运行解释器自身。五、当前仓库对“历史文件”的新约定用 wppm -diff 取代历史链值得注意的是仓库对_History.md这类文件的态度在 tests/test_changelog_files.py 中有明确说明新构建不再为每个版本生成_History.md配套文件。原因写在该测试模块的 docstring 中——历史文件是与“紧邻的上一个版本”对比而风味flavor在各发布周期之间会来去变化读者通常一年只升级一次这样的链式对比“不携带意义”真正需要的对比是读者自行选择任意两个索引文件通过wppm -diff a.md b.md完成。同时tests/test_diff_versions.py 还固化了历史文件命名与版本解析的规则_History.md不会被当作版本文件参与对比test_history_companions_are_never_the_answer32 位与 64 位是两条独立线test_architecture_separates_the_linesdot不能匹配dotftest_a_flavor_is_not_a_prefix_of_another。这些规则解释了为什么WinPythonZero-32bit-3.7.4.1_History.md与WinPythonZero-32bit-3.7.4.1.md会成对出现在 changelogs/ 目录中且前者不会干扰后者参与版本比较。因此对读者而言changelogs/目录中的历史文件是过去发行足迹的静态档案而要在当下快速回答“某两个 WinPython 版本/风味之间包有哪些变化”首选工具是wppm -diff。六、小结WinPythonZero-32bit-3.7.4.1_History.md这份历史文件记录了 WinPython 32bit 3.7.4.1 Zero 相对 3.7.4.0 的全部包级变化新增 fsspec 0.4.4升级 dask、jedi、parso、pip、pyodbc、qtpy、setuptools、wheel、winpython 共 9 个包无包被移除。通过同版本包索引可以还原该发行版的完整构成而通过 wppm/diff.py 与 wppm/wppm.py 的源码可以理解这类历史文件的生成机制——从索引行解析、三段式差异计算、版本查找到_History.md落盘与编码处理。若想获得任何两个发行版之间的即时差异报告直接使用wppm -diff即可无需等待仓库归档历史文件。赞分享开发工具构建工具CLI包管理器【免费下载链接】winpythonA free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.项目地址https://gitcode.com/gh_mirrors/wi/winpython点击查看免费下载相关推荐WinPython Zero 32bit 3.7.4.1 版本解析Barebone 精简分发的包清单、变更记录与 changelog 生成机制WinPython Zero 32bit 3.7.4.1 版本解析Barebone 精简分发的包清单、变更记录与 changelog 生成机制 WinPyth开发工具构建工具CLI包管理器WinPython-32bit 3.7.4.1 发行历史全解析从 fsspec、jupyter_server 到 pandas 0.25 的版本升级全景WinPython 32bit 3.7.4.1 发行历史全解析从 fsspec、jupyter_server 到 pandas 0.25 的版本升级全景 本指开发工具构建工具CLI包管理器WinPython-64bit 3.7.4.1 变更历史全解析包升级清单与 History 文档的生成机制WinPython 64bit 3.7.4.1 变更历史全解析包升级清单与 History 文档的生成机制 本篇技术指南以仓库中的官方变更历史文档 chang开发工具构建工具CLI包管理器上一篇探索 SQLBrite轻量级的 SQLite ORM 库下一篇终极Browserify指南快速掌握JavaScript模块化打包技巧 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考