- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
WinPython 是一个面向 Windows 平台的便携式 Python 发行版,其核心仓库(winpython)同时承载了 WinPython 构建工具链(含wppm包管理模块)。在 WinPython 生态中,同一套 Python 版本会按"风味(flavor)"衍生出不同定位的发行包,其中dot是一个长期维护的轻量精简系列。本文以changelogs/WinPythondot-64bit-3.8.5.0.md为骨架,完整还原 64 位 dot 3.8.5.0 发行版的组件清单、自 3.8.3.0dot 以来的全部变更明细,并结合仓库源码揭示这份 changelog 从构建流水线到 Markdown 表格的完整生成链路,帮助读者读懂、复现乃至自行生成同类发行说明。
一、dot 是什么:从构建配置看 flavor 机制
在 WinPython 构建体系中,"flavor" 定义了同一 Python 版本的不同发行形态。仓库根目录的 winpython_builds.toml 中专门为 dot 定义了独立配置块:
[flavors.dot] requirements = "dot_requirements.txt" source_dirs = "packages.win-amd64" toolsdirs = "bdTools\\Tools.dot"requirements:本 flavor 依赖的包清单文件,即仓库根目录的 dot_requirements.txt;source_dirs:存放 Python 官方压缩包(python.zip)的目录;toolsdirs:随发行包附带的开发工具目录。
此外,同一个 Python 版本下还会同时构建dotf、slim、slimf等 flavor(参见winpython_builds.toml中[pythons."314"]、[pythons."315"]的builds列表),dot是其中定位最轻量、只携带最核心组件的精简版。因此,WinPythondot-64bit-3.8.5.0.md记录的就是"dot 风味 + 64 位 + Python 3.8.5"这一组合的完整包索引,即该发行包的"成分表"。
而 flavor 最终会体现在版本号和文件名中:构建脚本 build_winpython.py 中,最终版本号由winpyver2 + flavor + release_level拼接(如3.8.5.0dot),changelog 文件名则按WinPython{flavor}-{arch}bit-{changelog_version}.md规则生成,这正是本文主角WinPythondot-64bit-3.8.5.0.md名称的由来。
二、3.8.5.0dot 发行包组件全景
根据原文档,WinPython-64bit v3.8.5.0dot 的包索引分为 Tools 与 Python packages 两部分。Tools 部分为空表,说明该 flavor 未附带任何独立工具集(对应toolsdirs为空或未安装可识别工具);Python packages 部分完整清单如下:
| Name | Version | Description |
|---|---|---|
| Python | 3.8.5 | Python programming language with standard library |
| msvc_runtime | 14.27.29016 | Install the Microsoft™ Visual C++™ runtime DLLs to the sys.prefix and Scripts directories |
| pip | 20.2.2 | The PyPA recommended tool for installing Python packages |
| setuptools | 49.6.0 | Easily download, build, install, upgrade, and uninstall Python packages |
| wheel | 0.35.1 | A built-package format for Python |
| sqlite_bro | 0.9.1 | a graphic SQLite Client in 1 Python file |
| winpython | 3.0.20200808 | WinPython distribution tools, including WPPM |
这份清单正是 dot_requirements.txt 所定义的"essential"集合的落地结果——该文件明确写着sqlite_bro、setuptools、wheel、build为必需项,并保留了被注释的##msvc_runtime(在 3.8.5.0dot 中它作为新增包实际打入了发行包),与包索引表高度吻合。值得注意的是,dot 精简版刻意不包含numpy、scipy 等科学计算包,这正是它与普通版、slim 版的本质区别:它面向"只要一个干净、可移植的 Python 环境"的场景。
三、自 3.8.3.0dot 以来的变更明细
配套历史文档 WinPythondot-64bit-3.8.5.0_History.md 记录了相对上一版本3.8.3.0dot的全部变化,完整内容如下:
新增包:
- msvc_runtime 14.27.29016:将 Microsoft Visual C++ 运行时 DLL 安装到
sys.prefix与Scripts目录。这是本版本最重要的变化——它为后续在精简环境中编译/运行需要 VC++ 运行时的扩展模块提供了底层保障。
升级包:
- pip:20.1 → 20.2.2(PyPA 推荐的 Python 包安装工具)
- Python:3.8.3 → 3.8.5(含标准库的 Python 编程语言)
- setuptools:46.4.0 → 49.6.0(下载、构建、安装、升级与卸载 Python 包的利器)
- wheel:0.34.2 → 0.35.1(wheel 内置包格式)
- winpython:2.4.20200425 → 3.0.20200808(WinPython 发行工具,含 WPPM)
从升级节奏可以看出 dot 系列的维护策略:只跟随基础运行时与包管理工具链的版本前进(Python 补丁版、pip、setuptools、wheel、winpython 本体),而不引入新的科学计算栈。winpython包升级到 3.0.20200808 意味着该发行包内置了新版 WinPython 发行工具与 WPPM 包管理器,这是用户日常管理环境的核心入口。
四、changelog 是怎么生成的:源码级链路拆解
这份包索引不是手写的,而是构建流水线第 7 步的自动化产物。在 build_winpython.py 中可以看到完整调用链:
拼接 changelog 版本号与文件名:
changelog_version = f"{winpyver2}{args.release_level}" mdn = f"WinPython{args.flavor}-{args.arch}bit-{changelog_version}.md" out = f"WinPython{args.flavor}-{args.arch}bit-{changelog_version}_History.md"其中
winpyver2由 Python 版本号转换为3_8_5_0再还原为3.8.5.0的形态,flavor为dot,arch为64——正好拼出WinPythondot-64bit-3.8.5.0.md。生成包索引 Markdown:构建脚本通过子进程调用
wppm.Distribution().generate_package_index_markdown(),将结果写入本文件。在 wppm/wppm.py 中,该方法先调用get_package_index_data()收集三类数据——tools(通过utils.get_installed_tools扫描工具目录)、packages(通过get_installed_packages()枚举已安装包,逐项取名称、URL、版本、描述)、wheelhouse(included.wheels目录内的离线轮子),再调用render_markdown_for_list()渲染成Tools/Python packages/WheelHouse packages三个 Markdown 表格。我们看到的这篇文档,正是该函数的直接输出。生成 History 对比文件:构建脚本随后调用
wppm.diff.compare_package_indexes()(实现见 wppm/diff.py)。其核心逻辑是:- 用
changelog_versions()扫描changelogs目录中同 flavor、同架构的所有.md文件,文件名经 PEP 440 版本解析器解析(wppm/diff.py第 141-151 行); - 用
find_previous_version()找到"恰好早于当前版本"的上一版本(此处即3.8.3.0dot); - 调用
load_version_markdown()读取两个版本的包索引,逐 section 用compare_markdown_sections()比对,输出New packages/Upgraded packages/Removed packages等区块。
这正是第二节"自 3.8.3.0dot 以来的变更明细"的机器生成源头。该机制在 wppm/diff.py 中还封装了
write_changelog(),支持把对比结果直接落盘为_History.md文件。- 用
五、如何读懂与复现这类发行说明
5.1 文件名即元数据
WinPythondot-64bit-3.8.5.0.md这个文件名本身就是完整的元数据:dot= flavor,64bit= 架构,3.8.5.0= 发行版本。对比测试 tests/test_changelog_files.py 也验证了这套解析规则——它能从WinPythondot-64bit-3.13.15.0.md这类名称中正确解出("dot", 64, "3.13.15.0"),并拒绝_History.md、hashes_*.md、pylock.*.toml等非包索引文件混入 changelogs 目录。
5.2 手工对比两个版本的包索引
仓库为读者保留了按需对比的能力。若想自行比较任意两个版本的 dot 包索引,可在仓库根目录执行(用法详见 wppm/diff.py 的print_usage()):
python -m wppm.diff 3.8.5.0 3.8.3.0 changelogs dot 64也可以直接比较两个文件(不限 flavor,任意两个包索引均可):
python -m wppm.diff WinPythondot-64bit-3.8.5.0.md WinPythondot-64bit-3.8.3.0.md5.3 从配置到发行包的复现路径
想要复现一个类似 dot 的精简发行包,可以沿仓库既有的构建入口走:根目录的 generate_a_winpython_distropy_meta.bat 会调用 build_winpython_meta.py,后者读取 winpython_builds.toml,把[pythons."3XX"]块与[flavors.dot]块展开为具体的构建任务(expand_builds(),见 build_winpython_meta.py),并支持315:slim、:dot、--dry-run等命令行筛选。典型用法:
generate_a_winpython_distropy_meta.bat winpython_builds.toml 315:dot generate_a_winpython_distropy_meta.bat winpython_builds.toml 315:dot --dry-run真正的构建执行则由 build_winpython.py 的main()完成,全程分为 8 个步骤:清理旧目录 →make.py搭建基础环境(winpython/make.py)→ 安装 mandatory/main 依赖(默认--force-reinstall且--only-binary=:all:,保证只用预编译轮子、绝不在构建机上现场编译第三方源码)→ 打补丁 → 字节码编译 → wheelhouse 依赖 → 生成 lockfiles → 生成 changelog(即本文所述文件)→ 可选创建安装器。其中 mandatory 依赖定义在 mandatory_requirements.txt(pip、setuptools、wppm),版本约束则统一收口在 constraints.txt。
六、总结:一份 changelog 背后的设计意图
WinPythondot-64bit-3.8.5.0.md表面上是 7 行包的清单,实际上是 WinPython 构建体系三个设计决策的缩影:
- flavor 化分发:同一 Python 版本按需裁剪,
dot提供最精简的可移植环境,与 winpython_builds.toml 中的[flavors.dot]配置一一对应; - changelog 自动化:包索引由
wppm.Distribution().generate_package_index_markdown()从真实安装环境中枚举生成(wppm/wppm.py),杜绝手写清单与实包不符; - 历史对比机械化:
_History.md由compare_package_indexes()对相邻两个包索引做结构化 diff 自动产出(wppm/diff.py),且按设计不自动写入 changelogs 目录——正如 tests/test_changelog_files.py 所固定:历史对比属于"读者按需自取"而非发布物。
对读者而言,理解这一机制后,无论是要快速确认某个 WinPython 发行包装了什么、升级了什么,还是想基于 dot 配置搭建自己的精简发行流水线,都能在这份 changelog 及其源码配套中找到完整答案。
- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
相关推荐
WinPython 3.4.3.1 变更历史深度解读:从包清单到 changelog 生成机制
WinPython 3.4.3.1 变更历史深度解读:从包清单到 changelog 生成机制 本篇技术指南以 WinPython 开源仓库中 changelo
开发工具构建工具CLI包管理器PicoClaw Docker 部署与快速上手指南:Compose 三种模式、Launcher Web 控制台与模型配置实战
PicoClaw Docker 部署与快速上手指南:Compose 三种模式、Launcher Web 控制台与模型配置实战 本篇指南完整讲解如何在零本地依赖的
开发工具构建工具CLI包管理器WinPython 3.4.3.2 发行版全解读:软件清单、变更历史与清单生成机制
WinPython 3.4.3.2 发行版全解读:软件清单、变更历史与清单生成机制 WinPython 3.4.3.2 是 WinPython 便携式 Pyth
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考