- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
本篇技术指南以 WinPython 仓库 changelogs/WinPythondot-32bit-3.8.7.0_History.md 为核心,解读 WinPython-32bit 3.8.7.0dot 相对 3.8.6.0dot 的 5 项包升级明细,并结合仓库中的构建配置(winpython_builds.toml)、构建脚本(winpython/build_winpython.py)与 changelog 生成工具(wppm/diff.py),说明这些变更在 WinPython 发行链中的实际角色,以及如何复现、验证该版本。读完本文,你将掌握:dot 变体是什么、该版本升级了哪些核心组件、History 文件是如何自动生成的,以及如何在本地用 WPPM 工具比较任意两个版本的包差异。
一、版本背景:WinPython 的 dot 变体与 32 位发行线
WinPython 是面向 Windows 平台的便携式 Python 发行版,其理念是"解压即用、随包预编译"。仓库根目录的 README.rst 说明,当前仓库承载的是wppm包与构建工具链:WinPython 包管理器(WPPM)负责浏览预置包、从自带 Wheelhouse 安装包、注册 WinPython;generate_a_winpython_distropy_meta.bat配合 TOML 配置则是从零构建发行版的工具链。
"dot" 并非 Python 的版本号,而是 WinPython 的一个构建变体(flavor)。在 winpython_builds.toml 中可以看到它的定义:
[flavors.dot] requirements = "dot_requirements.txt" source_dirs = "packages.win-amd64" toolsdirs = "bdTools\\Tools.dot"即:dot 变体以仓库根目录的 dot_requirements.txt 作为包清单来源,工具目录为bdTools\Tools.dot。该清单非常精简,只包含发行版最底层的"必需品":
# the essential sqlite_bro setuptools wheel build ##msvc_runtime结合 3.8.7.0dot 的正式包列表 changelogs/WinPythondot-32bit-3.8.7.0.md,该变体最终只装入 7 个包:Python 3.8.7、msvc_runtime 14.27.29016.1、pip 20.3.3、setuptools 51.1.0、sqlite_bro 0.9.1、wheel 0.36.2 与 winpython 工具 3.0.202011219。由此可见,dot 是接近"纯净 Python + 最小包管理基础设施"的发行形态,本份 History 记录的正是这批基础组件的一次集体升级。
同时要注意,History 文件名中的 "32bit" 表明这条发行线是独立维护的。tests/test_diff_versions.py 中的测试明确验证了 32 位与 64 位 changelog 互不可见:"architecture separates the lines"——比较 3.14.0.0 时,64 位线取 3.8.0.0、32 位线取 3.9.0.0。因此本篇文章讨论的 5 项升级只属于 32 位 dot 发行线。
二、本版本变更总览(相对 3.8.6.0dot)
根据 changelogs/WinPythondot-32bit-3.8.6.0_History.md 与本文档,3.8.7.0dot 仅发生了"升级"(Upgraded packages),没有新增或移除包。完整的升级清单如下:
| 包 | 旧版本(3.8.6.0dot) | 新版本(3.8.7.0dot) | 官方描述 |
|---|---|---|---|
| Python | 3.8.6 | 3.8.7 | Python programming language with standard library |
| pip | 20.2.4 | 20.3.3 | The PyPA recommended tool for installing Python packages |
| setuptools | 50.3.2 | 51.1.0 | Easily download, build, install, upgrade, and uninstall Python packages |
| wheel | 0.35.1 | 0.36.2 | A built-package format for Python |
| winpython | 3.0.20201028 | 3.0.202011219 | WinPython distribution tools, including WPPM |
这 5 项升级覆盖了"解释器(Python)—安装工具(pip)—构建工具(setuptools/wheel)—发行工具(winpython)"的完整链路,正好对应 WinPython 构建流水线的四个环节,下文逐一解读。
三、Python 3.8.6 → 3.8.7:解释器补丁更新
Python 从 3.8.6 升级到 3.8.7,属于 3.8 系列内的补丁级(patch)维护更新。在构建流水线中,Python 解释器是所有后续 pip 安装动作的执行者。从 winpython/build_winpython.py 的pip_install()可以看出,目标解释器是构建环境的唯一入口:
cmd = [ str(python_exe), "-m", "pip", "install", "-r", req_file, "-c", constraints, "--no-index", f"--find-links={find_links}", "--upgrade", "--no-warn-script-location" ]也就是说,Python 3.8.7 这个新解释器随后会亲自安装 dot 清单中的其余组件,并以它自身为目标生成字节码缓存(build_winpython.py 的compile_bytecode()用目标解释器对 site-packages 执行compileall)。因此解释器升级是整个 3.8.7.0dot 构建的地基,它先落地,其他包才谈得上安装。
四、pip 20.2.4 → 20.3.3:包安装器进入 20.3 时代
pip 是本版本中语义最重的一次升级。作为 WinPython 发行版内的"官方推荐包安装工具",pip 在构建链中承担两件关键工作:
- 构建期安装:如上文所示,
pip_install()以python -m pip install -r <requirements> -c <constraints> --no-index --find-links=<wheelhouse>的方式,从本地 wheelhouse 离线安装全部预置包; - 运行期服务:pip 20.3.3 随发行版交付给最终用户,用户后续用
pip install增删包时使用的就是它。
值得注意的是,pip 20.3 系列在 Python 生态中是依赖解析器(resolver)切换为默认行为的关键里程碑,这一代 pip 的解析行为与 20.2.x 有显著差异。本文不展开外部发布说明,但从工程角度,WinPython 团队在此版本选择跟进到 20.3.3,意味着 3.8.7.0dot 用户获得的默认安装行为已经是新一代解析逻辑。升级发生时旧的 20.2.4 已随 3.8.6.0dot 退出该发行线。
五、setuptools 50.3.2 → 51.1.0 与 wheel 0.35.1 → 0.36.2:构建后端与分发格式双双前移
setuptools 与 wheel 是 Python 打包体系的一对搭档:
- setuptools承担"下载、构建、安装、升级、卸载 Python 包"的构建后端职责,是大多数源码包(sdist)得以被构建成 wheel 的底层依赖;
- wheel定义"built-package format",即预构建分发格式。WinPython 的整个发行理念都建立在 wheel 之上:
source_dirs(如 dot 变体的packages.win-amd64)指向的 wheelhouse 里存放的就是预构建 wheel,构建时通过--find-links离线索引它们。
在 dot_requirements.txt 中,setuptools 与 wheel 位列前四,与 sqlite_bro、build 一起构成最小构建闭环。二者同版本升级,说明该版本对"构建→安装"链路做了整体刷新:新的 setuptools 51.1.0 配合新的 wheel 0.36.2,保证从源码包到 wheel 再到安装的路径一致。对最终用户而言,升级它们意味着后续pip install处理需要构建的包时,底层工具链与 PyPI 生态保持同步。
六、winpython 3.0.20201028 → 3.0.202011219:发行工具(含 WPPM)随版本迭代
最后一个升级项是 winpython 工具本身,官方描述为 "WinPython distribution tools, including WPPM"(即包含 WinPython 包管理器)。该工具随每个发行版内置,是用户管理 WinPython 的关键入口。从 wppm/wppm.py 的类定义可以看到它提供的核心能力:
Distribution:识别当前 WinPython 布局、列出已安装包、生成包索引 Markdown(即每个版本的.md包列表文件);patch_all_shebang/patch_standard_packages:将脚本 shebang 行改写为可移植形式(to_movable=True),这是"便携式发行版"能在不同目录间移动的关键处理;install/uninstall/do_pip_action:在发行版内部进行包管理的实际操作;register/unregister(见 wppm/associate.py):把 WinPython 注册进 Windows 注册表与开始菜单。
此外,README.rst 强调 "pip is the recommended way to add or remove packages otherwise"——即日常增删包首选 pip,WPPM 则专注于浏览预置包、从 Wheelhouse 安装与系统注册。该工具版本从 3.0.20201028 升到 3.0.202011219,属于紧贴 3.8.7.0dot 发布的配套迭代。
七、这份 History 从哪来:diff.py 的自动生成机制
本篇文章的主体——_History.md文件——并非手写,而是由 wppm/diff.py 自动生成的"版本间差异报告"。理解这一点,你就能读懂仓库里所有 History 文件的结构,并自行复现它。
核心函数是compare_package_indexes()(wppm/diff.py),它完成三步:
- 用
find_previous_version()(wppm/diff.py)在 changelogs 目录中按 PEP 440 解析文件名,找出目标版本之前的最近版本——3.8.7.0dot 的前驱正是 3.8.6.0dot; - 读取新旧两个版本的包列表
.md文件; - 用
compare_packages()(wppm/diff.py)按"包名归一化 + 版本比对"生成三段式报告:
output = "" if added: output += "\nNew packages:\n" + ... if upgraded: output += "\nUpgraded packages:\n" + "".join( f" * {p.name} {old[p.name].version} → {p.version} ({p.description})\n" ...) if removed: output += "\nRemoved packages:\n" + ...本文档中"Upgraded packages"的五条记录(如pip 20.2.4 → 20.3.3),正是这段代码对两个包索引逐行比对的结果。最终由write_changelog()(wppm/diff.py)写入changelogs/WinPythondot-32bit-3.8.7.0_History.md。
关于命名与隔离规则,仓库测试给出了明确的约束:
- tests/test_diff_versions.py 验证
find_previous_version的行为:不同 flavor(dot 与 slim)互不干扰、不同架构(32/64 位)各行其道、_History.md伴生文件永远不会被当作正式版本参与比较; - tests/test_changelog_files.py 验证 changelog 文件名的解析规则:
WinPythondot-32bit-3.9.0.0b1.md可解析为 (flavor="dot", arch=32, version="3.9.0.0b1"),而_History.md、hashes_*.md、pylock.*.toml均被排除。
因此,当你看到任意一份WinPython<flavor>-<arch>bit-<version>_History.md,都可以断定它遵循同一套自动生成格式,且只与同 flavor、同架构的前一个版本作比较。
八、实操:复现与验证 3.8.7.0dot 的包集
8.1 用 WPPM 在本地重现这份差异报告
你可以直接用仓库自带的 diff 工具复现本文档的生成过程。运行方式(见 wppm/diff.py 的print_usage()):
# 按版本比较:<version2> <version1> [searchdir] [flavor] [architecture] python -m wppm.diff 3.8.7.0 3.8.6.0 changelogs dot 32输出即是"History of changes for WinPython-32bit 3.8.7.0dot"的完整内容,与 changelogs/WinPythondot-32bit-3.8.7.0_History.md 一一对应。若想直接落盘:
python -m wppm.diff --write-changelog 3.8.7.0 3.8.6.0 changelogs dot 32此外,wppm -diff也支持直接比较两个任意的包列表文件(不限版本目录):
wppm -diff file1.md file2.md这是判断两个 WinPython 索引"差了什么"的最快手段。
8.2 按 dot 清单构建/安装等价包集
若你想自行组装一个与 3.8.7.0dot 等价的 Python 3.8 环境,可沿两条路线:
路线 A:直接使用仓库的清单文件。以 dot_requirements.txt 为基线,配合该版本的 pylock / requir 锁文件(锁定了每个包的精确版本与 hash)执行:
python -m pip install --no-deps --require-hashes -r requir.64-3_8_7_0dot.txt路线 B:走官方构建工具链。仓库提供了 TOML 驱动的构建入口 generate_a_winpython_distropy_meta.bat,底层调用 build_winpython_meta.py 解析 winpython_builds.toml,支持按python:flavor选择构建目标:
generate_a_winpython_distropy_meta.bat winpython_builds.toml 38:dot --dry-run--dry-run只打印将要执行的构建命令而不实际运行(见 build_winpython_meta.py),是观察"一个 dot 构建究竟会做什么"的安全方式。构建中会经过pip install、字节码编译(--bytecode支持pip/none/parallel/parallel-N)、shebang 可移植化(patch_standard_packages)等环节,最终产出含 pylock.toml、requir.txt 与包索引.md的发行目录。
8.3 注意事项
- 本文档对应的 Python 3.8.7 解释器与 pip 20.3.x 均为历史版本,现代 pip(>= 23)与 Python 3.8 之后的解释器行为已有较大差异;本文讨论的是该版本发布时的真实状态,若要在新环境复现,应以锁文件为准,而不是直接安装"最新版"组件;
- dot 变体默认
arch = "64"(见 winpython_builds.toml),本文讨论的 32 位发行线是构建配置之外的独立产物,比较时务必携带32架构参数,否则会误落到 64 位版本线。
九、总结:从一份 History 看 WinPython 的发布节奏
changelogs/WinPythondot-32bit-3.8.7.0_History.md 虽只有 5 条升级记录,却是观察 WinPython 发布机制的绝佳样本:
- 升级粒度:一个版本只做"解释器 + 打包工具链 + 发行工具"的同步刷新,不掺入大功能变更,符合便携式发行版的稳定性取向;
- 可复现性:每个版本的正式包列表(
.md)、差异报告(_History.md)、锁文件(pylock/requir)三件套齐备,任何历史状态都能被精确重建; - 自动化:History 由 wppm/diff.py 自动比对生成,flavor、架构、发布级别(如 b1)均被正确纳入版本排序,读者看到的不再是人工维护、可能失真的手写记录。
读懂一份 WinPython 变更历史,就等于同时读懂了它的构建配置(winpython_builds.toml)、最小包清单(dot_requirements.txt)、构建执行逻辑(winpython/build_winpython.py)与差异生成工具(wppm/diff.py)。下次再遇到任何WinPython*-*bit-*_History.md文件,你都可以用python -m wppm.diff亲手验证它的每一行。
- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
相关推荐
WinPython Zero 32 位 3.7.0.2 变更记录解读:新增 pythonnet、python_snappy 与包管理工具链升级
WinPython Zero 32 位 3.7.0.2 变更记录解读:新增 pythonnet、python_snappy 与包管理工具链升级 导读 本文围绕
开发工具构建工具CLI包管理器WinPython 3.10.0.1dot(32 位)变更历史解读:升级包清单与 Changelog 生成机制
WinPython 3.10.0.1dot(32 位)变更历史解读:升级包清单与 Changelog 生成机制 本文以 WinPython 官方仓库中 WinP
开发工具构建工具CLI包管理器gbrain Minions 半迁移安装修复实战:从诊断到收敛的完整指南
gbrain Minions 半迁移安装修复实战:从诊断到收敛的完整指南 导读 本文聚焦 gbrain(Garry's Opinionated OpenClaw
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考