- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
本文以 WinPython 仓库 changelogs 目录下的 WinPythondot-64bit-3.9.5.0_History.md 为骨架,逐项拆解该 dot 风味 64 位发行版相对 3.9.4.0dot 的包升级内容;同时结合仓库内 wppm/diff.py、wppm/wppm.py、winpython_builds.toml 等源码与配置文件,说明这类
_History.md变更清单的生成原理、文件命名约定与复现命令,帮助读者既看懂「这一版改了什么」,也理解「这些记录是怎么自动产出的」。
一、版本概览:3.9.5.0dot 是什么
WinPython 是一个面向 Windows 平台的自由 Python 发行版,内置经过预编译的 Scientific Python 生态包。发行版命名中带有 flavor 后缀(如dot、slim、dotf),表示不同的软件包组合取向:
dot:精简的「点文件」风味,仅保留运行 Python 所需的最基础组件(Python 本体、pip、setuptools、wheel、sqlite_bro 等),对应仓库根目录的 dot_requirements.txt;slim:基于另一份 requirements_slim.txt 的瘦身版;- 无后缀(如
WinPython-64bit-3.9.5.0):完整风味。
在 winpython_builds.toml 中,[flavors.dot]一节明确给出了 dot 风味的构建定义:
[flavors.dot] requirements = "dot_requirements.txt" source_dirs = "packages.win-amd64" toolsdirs = "bdTools\\Tools.dot"而「3.9.5.0dot」这类完整版本串,按照 wppm/diff.py 中的解析模式WinPython{flavor}-{architecture}bit-(.+)\.(?:txt|md)$,可拆解为:发行版前缀WinPython+ flavordot+ 架构64bit+ 版本3.9.5.0。该版本串也出现在仓库根目录的 changelogs/md5_sha1.txt(Winpython64-3.9.5.0dot.exe,25,839,482 字节)中,可作为该安装包发布记录的另一处佐证。
本文主体_History.md是「历史变更清单」文档:它对比的是3.9.4.0dot → 3.9.5.0dot两个相邻版本之间的差异,只记录「Upgraded packages(升级的包)」,因为 dot 风味本版没有新增与移除项。配套的 WinPythondot-64bit-3.9.5.0.md 则是该版本的「包索引」文档,列出最终包含的完整包列表;两者一为「结果快照」,一为「变更轨迹」,共同构成一个版本的完整元数据。
二、本次升级的包清单(Upgraded packages)
根据关联文档,自 3.9.4.0dot 以来共有 6 个包升级,均为 dot 风味的基础组件:
| 包名 | 旧版本 → 新版本 | 说明 |
|---|---|---|
| msvc_runtime | 14.28.29910 → 14.29.30036 | 将 Microsoft Visual C++ 运行时 DLL 安装到 sys.prefix 与 Scripts 目录 |
| pip | 21.1.dev0 → 21.1.3 | PyPA 推荐的 Python 包安装工具 |
| Python | 3.9.4 → 3.9.5 | Python 编程语言及标准库 |
| setuptools | 56.0.0 → 57.0.0 | 便捷地下载、构建、安装、升级与卸载 Python 包 |
| sqlite_bro | 0.9.1 → 0.9.3 | 单文件实现的图形化 SQLite 客户端 |
| winpython | 4.1.20210417 → 4.3.20210620 | WinPython 发行版工具集(含 WPPM) |
对照同版本完整风味(无 flavor)的 WinPython-64bit-3.9.5.0_History.md 可以看到,完整版同时包含「New packages(新增)」与「Removed packages(移除)」两大节,其中新增了 spacy 3.0.6、fastai 2.4、dask_image 0.6.0、datasette_graphql 1.4 等 40 余个包,并升级了 numpy 1.21.0+mkl、scipy 1.7.0、torch 1.9.0、pandas 1.2.5 等 100 余个包。相比之下,dot 风味刻意保持最小化——这正是 flavor 机制的意义所在:不同风味面向不同使用场景,dot 只承担「可运行、可扩展」的基础职责。
2.1 各升级项的落点与意义
- Python 3.9.4 → 3.9.5:Python 3.9 系列的小版本维护更新。在 WinPython 中,Python 本体同时作为发行版元数据的一部分(见下文
distribution.python_version字段)被记录。 - pip 21.1.dev0 → 21.1.3:从开发版版本号回到正式发布轨道。pip 是 WinPython 后续通过 WPPM 安装一切扩展包的底层依赖。
- setuptools 56.0.0 → 57.0.0:与 pip 同步升级的构建工具链。
- msvc_runtime 14.29.30036:提供运行编译型扩展所需的 MSVC 运行时 DLL。注意 dot_requirements.txt 中该行以
##msvc_runtime形式存在(双井号注释),说明在 requirements 文件里它处于注释状态、由构建流程另行注入。 - sqlite_bro 0.9.3:图形化 SQLite 客户端,dot 风味随附的实用小工具。
- winpython 4.3.20210620:WinPython 自身的发行版工具集(含 WPPM,即 WinPython Package Manager),其版本号采用日期式(20210620)标记构建时间。
三、_History.md文档的生成机制(源码级解读)
这类_History.md文件并非纯手工维护,而是由仓库内 wppm 子包的diff模块自动生成。核心链路如下:
- 版本解析:wppm/diff.py 中的
changelog_versions()扫描changelogs/目录,用正则WinPython{flavor}-{architecture}bit-(.+)\.(?:txt|md)$匹配索引文件,并用packaging.version.parse()解析版本号。正则只匹配「包索引」文件(如WinPythondot-64bit-3.9.5.0.md),_History.md伴生文件因无法解析为合法版本会被自动跳过; - 寻找上一版本:
find_previous_version()(wppm/diff.py)在changelogs/中筛选所有小于目标版本的记录,取最大者作为对比基准。因此 3.9.5.0 的 History 自然对上了 3.9.4.0; - 解析两侧包索引:
PackageIndex类(wppm/diff.py)将索引文档按### Tools、### Python packages、### WheelHouse packages三类小节解析为「包名 → Package」字典; - 逐包对比并产出清单:
compare_packages()(wppm/diff.py)对两个版本做集合差:- 只在新版出现的包 →
New packages; - 两侧都有但版本不同 →
Upgraded packages(输出格式为包名 旧版本 → 新版本 (说明),正是本文档的行格式); - 只在旧版出现的包 →
Removed packages;
- 只在新版出现的包 →
- 组装最终文档:
compare_package_indexes()(wppm/diff.py)拼出## History of changes for WinPython-{architecture}bit {version2 + flavor}标题与开头说明,最后以* * *收尾——这与本文档的结构完全一致。
仓库测试 tests/test_diff_versions.py 对该机制做了针对性验证,例如find_previous_version("3.14.7.1", searchdir, "dot") == "3.14.7.0",并确认带发布级别(如b1)的版本也能被正确排序与选取。
3.1 如何在本地复现「生成 History 文档」
wppm.diff模块同时提供命令行入口(wppm/diff.py),支持多种对比方式:
# 方式一:按版本号对比两个 WinPython 包索引(默认从 changelogs/ 读取、64 位、空 flavor) python -m wppm.diff 3.9.5.0 3.9.4.0 # 方式二:显式指定 flavor 与架构 python -m wppm.diff 3.9.5.0 3.9.4.0 <searchdir> dot 64 # 方式三:直接对比两个索引文件(任意顺序、任意 flavor) python -m wppm.diff WinPythondot-64bit-3.9.4.0.md WinPythondot-64bit-3.9.5.0.md # 方式四:把对比结果写入 _History.md 文件 python -m wppm.diff --write-changelog 3.9.5.0 3.9.4.0 <searchdir> dot 64 <basedir>其中--write-changelog调用的write_changelog()(wppm/diff.py)会生成WinPython{flavor}-{architecture}bit-{version2}_History.md,与本文档的命名约定完全对应。该模块还支持--section(对比指定小节)与--pairs(成对对比小节)两种细化模式。
值得注意的是,仓库测试 tests/test_changelog_files.py 明确说明:当前构建流程不再自动生成_History.md伴生文件,因为「History 的意义在于对比读者自己选择的两个索引,而版本链对跨 cycle 的读者没有意义」,改用wppm -diff a.md b.md这类按需对比方式。因此仓库中的_History.md文件更多承担历史归档与文档沉淀的职责。
四、配套的包索引文档与 WPPM 生成管线
与_History.md同目录的 WinPythondot-64bit-3.9.5.0.md 是本版本的包索引快照,其表格结构(Name | Version | Description)由 WPPM 生成。在 wppm/wppm.py 中:
get_package_index_data()收集发行版身份(名称、版本、Python 版本、位数、发布级别)、工具列表、已装包列表与 wheelhouse 列表,其中发行版身份来自环境变量WINPYVER2(版本)、WINPYFLAVOR(风味)与WINPYVER(发布级别);generate_package_index_markdown()调用render_markdown_for_list()(wppm/wppm.py)按「Tools / Python packages / WheelHouse packages」三节渲染 Markdown 表格,输出格式与本文档所依附的索引文件逐列一致。
从索引内容可以看到,3.9.5.0dot 最终包含:Python 3.9.5、msvc_runtime 14.29.30036、pip 21.1.3、setuptools 57.0.0、sqlite_bro 0.9.3、wheel 0.36.2、winpython 4.3.20210620 共 7 个 Python 包,Tools 小节为空——即该风味未附带 Node.js、Pandoc、VSCode 等外部工具(对比 wppm/utils.py 中get_installed_tools()的检测逻辑可印证这一点)。
五、从 History 文档反观 flavor 构建体系
dot 风味的构建配置(winpython_builds.toml)由 build_winpython_meta.py 中的expand_builds()展开为具体的 (python, flavor) 构建对,其派生规则是:
basedir = {root_dir_for_builds}\bd{python};requirements = {basedir}\{flavor requirements}(dot 对应dot_requirements.txt);source_dirs = {basedir}\{flavor source_dirs}(dot 对应packages.win-amd64);toolsdirs = {root_dir_for_builds}\{flavor toolsdirs}(dot 对应bdTools\Tools.dot)。
典型的本地构建命令为(来自 winpython_builds.toml 与 generate_a_winpython_distropy_meta.bat):
generate_a_winpython_distropy_meta.bat winpython_builds.toml 315:slim generate_a_winpython_distropy_meta.bat winpython_builds.toml 315 generate_a_winpython_distropy_meta.bat winpython_builds.toml ... --dry-run :: 仅打印构建命令而不真正执行构建时run_build()(build_winpython_meta.py)会将 flavor 名、requirements 路径、constraints 等以命令行参数传给python -m winpython.build_winpython。在 3.9.5.0 时代,dot 风味的构建产物最终即对应本 History 文档记录的那 6 项升级——它们全部落在基础工具链上,没有任何第三方科学计算包,这从侧面验证了 dot flavor 的「最小可运行」定位。
六、小结
WinPythondot-64bit-3.9.5.0_History.md是 WinPython dot 风味 64 位发行版 3.9.4.0dot → 3.9.5.0dot 的官方变更记录:6 个包升级,全部集中于 Python 本体与基础工具链(Python 3.9.5、pip 21.1.3、setuptools 57.0.0、msvc_runtime 14.29.30036、sqlite_bro 0.9.3、winpython 4.3.20210620)。该类文档由 wppm 的 diff 模块自动生成,文件命名遵循WinPython{flavor}-{architecture}bit-{version}_History.md约定,读者既可通过python -m wppm.diff自行复现任意两个版本的对比,也可结合同目录的包索引文件与 winpython_builds.toml 追溯每个版本、每种风味的完整构成。
- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
相关推荐
WinPython PyPy 3.8.12.2 发行版变更全解析:PyPy 生态升级、包清单变迁与 History 文档生成机制
WinPython PyPy 3.8.12.2 发行版变更全解析:PyPy 生态升级、包清单变迁与 History 文档生成机制 WinPython 是面向 W
开发工具构建工具CLI包管理器WinPython 3.3.5.7 发行版变更全解析:新增与升级包清单及 History 文件生成机制
WinPython 3.3.5.7 发行版变更全解析:新增与升级包清单及 History 文件生成机制 WinPython 3.3.5.7 是 WinPytho
开发工具构建工具CLI包管理器WinPython Qt5 32 位 3.6.8.0 版本变更深度解析:从 3.6.7.0Qt5 升级的包清单与 History 文档生成机制
WinPython Qt5 32 位 3.6.8.0 版本变更深度解析:从 3.6.7.0Qt5 升级的包清单与 History 文档生成机制 本篇技术指南以
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考