- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
WinPython-64bit 3.8.6.0dot 是 WinPython 项目在 2020 年 10 月发布的 dot 系列(精简发行版)版本,本文以 changelogs/WinPythondot-64bit-3.8.6.0_History.md 为主体,逐项解读该版本的包升级明细,并深入仓库源码,说明这类_History.md变更记录是如何由构建流程自动生成、如何被版本比较工具消费的。读者读完本文后,既能完整掌握 3.8.6.0dot 相对上一版本的包级变化,也能学会使用wppm -diff自行对比任意两个版本的包索引。
一、3.8.6.0dot 版本概要
根据 WinPythondot-64bit-3.8.6.0.md(该版本的完整包索引),WinPython-64bit v3.8.6.0dot 共包含 7 个 Python 包:
| 包名 | 版本 | 说明 |
|---|---|---|
| Python | 3.8.6 | Python 编程语言及标准库 |
| msvc_runtime | 14.27.29016.1 | 将 Microsoft Visual C++ 运行时 DLL 安装到 sys.prefix 与 Scripts 目录 |
| pip | 20.2.4 | PyPA 推荐的 Python 包安装工具 |
| setuptools | 50.3.2 | Python 包的下载、构建、安装、升级与卸载工具 |
| sqlite_bro | 0.9.1 | 单文件实现的图形化 SQLite 客户端 |
| wheel | 0.35.1 | Python 内置包(wheel)格式 |
| winpython | 3.0.20201028 | WinPython 发行工具集,含 WPPM |
注意dot后缀:这是 WinPython 的 flavor(口味/变体)标记。在 winpython_builds.toml 中,[flavors.dot]定义了这一变体使用dot_requirements.txt作为需求清单、packages.win-amd64作为源码包目录、bdTools\Tools.dot作为工具目录。从文件命名看,历史上有WinPythondot(dot 系列)与WinPythonslim(slim 系列)等多种风味并存,dot 系列属于精简型发行,包数量远少于完整版 WinPython。
二、3.8.6.0dot 的升级包清单(文档主体内容)
WinPythondot-64bit-3.8.6.0_History.md 记录的是自 3.8.5.0dot 以来的变化,本次升级共涉及 5 个包,均为"升级",没有新增包、也没有移除包:
| 包 | 升级前版本 | 升级后版本 | 说明 |
|---|---|---|---|
| msvc_runtime | 14.27.29016 | 14.27.29016.1 | 将 Microsoft Visual C++ 运行时 DLL 安装到 sys.prefix 与 Scripts 目录 |
| pip | 20.2.2 | 20.2.4 | PyPA 推荐的 Python 包安装工具 |
| Python | 3.8.5 | 3.8.6 | Python 编程语言及标准库 |
| setuptools | 49.6.0 | 50.3.2 | Python 包的下载、构建、安装、升级与卸载工具 |
| winpython | 3.0.20200808 | 3.0.20201028 | WinPython 发行工具集,含 WPPM |
逐一解读:
- Python 3.8.5 → 3.8.6:这是本次变更的核心,即 CPython 3.8 系列的第 6 个维护版本。对比 WinPythondot-64bit-3.8.5.0.md 中的索引可确认,3.8.5.0dot 时内置的 Python 为 3.8.5,本次提升到 3.8.6。
- pip 20.2.2 → 20.2.4:pip 的小版本维护更新,属于 PyPA 推荐的包安装工具的标准升级节奏。
- setuptools 49.6.0 → 50.3.2:跨两个小版本(49→50)的升级。setuptools 50.x 系列是构建工具链的重要版本节点。
- msvc_runtime 14.27.29016 → 14.27.29016.1:VC++ 运行时补丁包号升级。该包的作用是把 MSVC 运行时 DLL 放进
sys.prefix和Scripts目录,保证编译型 Python 扩展在目标机器上无需额外安装 VC++ 运行库即可运行。 - winpython 3.0.20200808 → 3.0.20201028:WinPython 自身工具链(含 WPPM,即 WinPython Package Manager)的更新,版本号采用日期式命名(2020-10-28)。
对比上一份变更记录 WinPythondot-64bit-3.8.5.0_History.md 可以看出,3.8.5.0dot 引入了新包msvc_runtime并首次将 winpython 工具链升级到 3.0 系列(2.4.20200425 → 3.0.20200808);而 3.8.6.0dot 则是在此基础上的纯升级版本,没有新增和移除项。
三、_History.md 文档从何而来:构建流程的第 7 步
这类_History.md文件并不是手写的,而是 WinPython 构建管线自动生成的产物。在 winpython/build_winpython.py 的main()函数中,构建流程共有 8 个步骤,其中第 7 步 "generate changelog" 就负责产出变更记录:
- 先调用
wppm.Distribution().generate_package_index_markdown(),把当前发行版的实际包清单渲染成 Markdown 包索引(即WinPythondot-64bit-3.8.6.0.md这类文件),并复制到仓库的changelogs/目录; - 再调用
wppm.diff.compare_package_indexes(...),把新索引与changelogs/目录中同一 flavor、同一架构的前一个版本索引做差,生成WinPythondot-64bit-3.8.6.0_History.md。
构建脚本中版本号拼接逻辑changelog_version = f"{winpyver2}{args.release_level}"(winpython/build_winpython.py)说明,版本字符串由 WinPython 主版本号(如3.8.6.0)加可选发布级别(如b1)组成;文件命名格式统一为WinPython{flavor}-{arch}bit-{version}_History.md(winpython/build_winpython.py),这正与关联文档的文件名WinPythondot-64bit-3.8.6.0_History.md吻合。
生成后的_History.md保留在构建输出目录中供构建者发布前审阅,只有包索引文件才被归档进仓库的changelogs/目录——这一点在 tests/test_changelog_files.py 中有明确注释:变更记录比较的是紧邻的前一版本,而 flavor 在不同周期之间会增减、用户大约每年才升级一次,因此这种"与前一版本对比"的文档链本身意义有限,读者真正需要的对比是"任意两个包索引之间的差",这由wppm -diff提供。
四、版本差如何计算:wppm/diff.py 的实现原理
_History.md的核心内容是"升级包"清单,其生成逻辑位于 wppm/diff.py:
Package类(wppm/diff.py)用正则从包索引的行中解析出名称 | 链接 | 版本 | 描述四个字段;PackageIndex类(wppm/diff.py)把索引文件按### Tools、### Python packages、### WheelHouse packages三个小节归类;compare_packages()(wppm/diff.py)对新旧两份索引做归一化(包名统一小写、-替换为_)后,计算三类差异并生成对应的 Markdown 行:New packages:—— 新索引有、旧索引没有的包;Upgraded packages:—— 两个索引都有但版本不同的包,输出格式为旧版本 → 新版本;Removed packages:—— 旧索引有、新索引没有的包;
compare_package_indexes()(wppm/diff.py)则负责组装文档头部——即关联文档第一行的## History of changes for WinPython-64bit 3.8.6.0dot与"自 3.8.5.0dot 以来的变化"这句描述——并把各小节的差异拼接起来,最后以* * *结尾。
关联文档中 5 个"Upgraded packages"条目,正是compare_packages对 3.8.6.0 索引与 3.8.5.0 索引比对后输出的结果,pip 20.2.2 → 20.2.4这类箭头格式与源码f" * {p.name} {old[p.name].version} → {p.version} ({p.description})\n"(wppm/diff.py)的渲染逻辑完全对应。
五、"前一个版本"如何确定:文件名即事实来源
compare_package_indexes需要知道"上一个版本"是谁,这由find_previous_version()(wppm/diff.py)完成。它的一个关键设计是:只从changelogs/目录中的文件名推断版本,不读文件内容。文件命名模式为WinPython{flavor}-{arch}bit-{version}.md(wppm/diff.py),解析出的版本交给 PEP 440 的packaging.version.parse做排序,然后取所有早于目标版本中的最大值作为比较基准。
tests/test_diff_versions.py 用合成目录("函数只关心文件名而非内容,所以空文件配上正确文件名就能驱动真实代码")系统验证了这套逻辑:
find_previous_version("3.8.6.0")在存在3.8.5.0与3.8.6.0_History.md的目录中,会正确返回3.8.5.0,且_History.md伴生文件永远不会被当作版本(tests/test_diff_versions.py);- flavor 之间互不可见:dot 的变更只会对比 dot 的上一版本,不会被 slim 的版本干扰(tests/test_diff_versions.py);
- 架构同样隔离:32bit 与 64bit 各自独立成线(tests/test_diff_versions.py);
- 旧式
.txt变更记录(如WinPython-64bit-2.7.10.1.txt)仍被识别为合法版本(tests/test_diff_versions.py)。
正是依赖这套"文件名即版本"的机制,3.8.6.0dot 的变更记录才被正确锚定到 3.8.5.0dot 作为比较对象。
六、动手验证:用 wppm -diff 复现这份变更记录
除了构建管线自动生成外,任何两个包索引之间的差异都可以手工复现。wppm(WinPython Package Manager)提供了-diff子命令,其帮助文本定义在 wppm/wppm.py:
wppm -diff <INDEX1> <INDEX2>用法示例(任意两个发行版/风味的索引文件都可以比较,不必是相邻版本,方向也任意):
wppm -diff changelogs/WinPythondot-64bit-3.8.5.0.md changelogs/WinPythondot-64bit-3.8.6.0.md执行后将输出两版本间的全部差异,其中### Python packages小节下的 "Upgraded packages" 清单应与本文第二部分表格完全一致(Python 3.8.5 → 3.8.6、pip 20.2.2 → 20.2.4、setuptools 49.6.0 → 50.3.2、msvc_runtime 14.27.29016 → 14.27.29016.1、winpython 3.0.20200808 → 3.0.20201028)。直接以脚本方式运行时,等价形式是:
python -m wppm.diff changelogs/WinPythondot-64bit-3.8.5.0.md changelogs/WinPythondot-64bit-3.8.6.0.md按版本号比较(不指定前一版本时会自动用find_previous_version推导)以及将结果写入_History.md文件的写法,参见 wppm/diff.py 中的 usage 说明;--write-changelog模式会调用write_changelog()(wppm/diff.py)生成与关联文档同构的变更记录文件。
此外,wppm还提供-md(Markdown 格式输出当前安装的包索引)、-ls(列出已装包)、-tl(顶层依赖分析)等子命令(wppm/wppm.py),它们与-diff共用Distribution与包解析基础设施,可辅助核对本机 WinPython 环境与历史索引的一致性。
七、小结
WinPython-64bit 3.8.6.0dot 是一次纯升级型的维护发布:Python 3.8.6 打底,pip/setuptools/msvc_runtime/winpython 工具链同步推进,包集合与 3.8.5.0dot 完全一致。而承载这一信息的_History.md文档,本质上是构建管线(winpython/build_winpython.py)与差异引擎(wppm/diff.py)联合作用的自动产物:包索引渲染 → 同 flavor 前一版本定位 → 差集计算 → Markdown 输出。理解了这条链路,读者既可以读懂仓库changelogs/目录下任意一份历史变更记录,也可以随时用wppm -diff复现、验证乃至扩展出属于自己的版本对比。
- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
相关推荐
WinPython 3.5.1.3Zero 变更历史全解读:从包版本清单到 _History.md 的自动生成机制
WinPython 3.5.1.3Zero 变更历史全解读:从包版本清单到 _History.md 的自动生成机制 导读 本文围绕 WinPython 仓库中
开发工具构建工具CLI包管理器Agent Substrate 调度器深度解析:容量门控与原子分配如何精准挑选 Worker
Agent Substrate 调度器深度解析:容量门控与原子分配如何精准挑选 Worker Agent Substrate 调度器 是这套"百万级沙箱"Age
开发工具构建工具CLI包管理器WinPython Zero 32-bit 3.5.4.2 版本变更全解析:从 3.5.4.1Zero 升级包清单到 changelog 自动生成机制
WinPython Zero 32 bit 3.5.4.2 版本变更全解析:从 3.5.4.1Zero 升级包清单到 changelog 自动生成机制 本文以
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考