☰
WinPython 精简版 dot 发行包深度解读:3.8.5.0 组件清单、变更历史与 changelog 生成机制
2026/10/17 2:20:11 网站建设 项目流程
  • 开发工具
  • 构建工具
  • CLI
  • 包管理器

【免费下载链接】winpython

A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.

项目地址:https://gitcode.com/gh_mirrors/wi/winpython
点击查看免费下载

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 部分完整清单如下:

NameVersionDescription
Python3.8.5Python programming language with standard library
msvc_runtime14.27.29016Install the Microsoft™ Visual C++™ runtime DLLs to the sys.prefix and Scripts directories
pip20.2.2The PyPA recommended tool for installing Python packages
setuptools49.6.0Easily download, build, install, upgrade, and uninstall Python packages
wheel0.35.1A built-package format for Python
sqlite_bro0.9.1a graphic SQLite Client in 1 Python file
winpython3.0.20200808WinPython 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 中可以看到完整调用链:

  1. 拼接 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。

  2. 生成包索引 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 表格。我们看到的这篇文档,正是该函数的直接输出。

  3. 生成 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.md

5.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 构建体系三个设计决策的缩影:

  1. flavor 化分发:同一 Python 版本按需裁剪,dot提供最精简的可移植环境,与 winpython_builds.toml 中的[flavors.dot]配置一一对应;
  2. changelog 自动化:包索引由wppm.Distribution().generate_package_index_markdown()从真实安装环境中枚举生成(wppm/wppm.py),杜绝手写清单与实包不符;
  3. 历史对比机械化:_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.

项目地址:https://gitcode.com/gh_mirrors/wi/winpython
点击查看免费下载

相关推荐

上一篇:如何一次性安装所有Visual C++运行库:终极完整解决方案
下一篇:NoFences:终极免费Windows桌面分区神器,3分钟告别杂乱无章的桌面

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询