☰
WinPython Zero 变体全解析:32 位 3.7.1.0 发行版包构成与 Changelog 生成机制
2026/10/16 2:42:57 网站建设 项目流程
  • 开发工具
  • 构建工具
  • 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 发行版,其仓库通过不同的flavor(变体)组织多种发行形态。本文以changelogs/WinPythonZero-32bit-3.7.1.0.md这份发布包清单为主体,完整解读 32 位 WinPython 3.7.1.0Zero 的每一个内置包及其定位,并结合仓库源码(wppm/wppm.py、wppm/diff.py、winpython/make.py)剖析这份清单是如何被自动生成、如何与相邻版本做差异对比的。读完本文,你将掌握 WinPython Zero 变体的组成逻辑、版本演进脉络,以及用wppm.diff复现这类 Changelog 的完整命令。

一、Zero 变体在 WinPython 发行体系中的位置

在changelogs/目录下,WinPython 的每个发行版都遵循统一的文件命名模式:WinPython{flavor}-{architecture}bit-{version}.md。这个模式并非巧合,而是由 wppm/diff.py 中的正则表达式直接定义的:

pattern = re.compile(rf"WinPython{re.escape(flavor)}-{architecture}bit-(.+)\.(?:txt|md)$")

从 changelogs 目录可以观察到,WinPython 历史上存在多种 flavor:Zero、Slim、Qt5、cod、dot、Ps2、PyPy、mkl、blas、free等,分别对应不同的应用场景。本文讨论的Zero是其中面向"零工具、最小化"诉求的变体——这一推断的直接证据来自清单本身:

  • 文档的### Tools小节是一张空表(只有表头 Name/Version/Description,没有任何条目);
  • 与仓库中 winpython/portable/launchers_final 所呈现的完整工具集(Spyder、Jupyter Lab/Notebook、VS Code、WinPython Control Panel、WinPython Command Prompt 等启动器)形成鲜明对比,Zero 变体不携带这些独立工具;
  • 整个 Python packages 小节也只有 26 个条目,属于高度精简的集合。

在 winpython/make.py 中,flavor 是构建器的第一等公民:WinPythonDistributionBuilder.__init__接收flavor参数,而winpython_version_name属性的组合方式为f"{self.python_full_version}.{self.build_number}{self.flavor}{self.release_level}"——这正是"3.7.1.0 + Zero"版本号的由来。构建时_create_env_config会把 flavor 写入scripts/env.ini的WINPYFLAVOR字段,供运行时识别发行形态。

需要说明的是,当前仓库根目录的新一代构建配置 winpython_builds.toml 只声明了dot、dotf、slim、slimf、whl等现代 flavors(见[flavors.*]与[pythons.*]小节),Zero 属于 2018 年前后(Python 3.7 时代)的历史 flavor,其历史构建入口由 generate_a_winpython_distropy_meta.bat 调用 build_winpython_meta.py 完成。

二、WinPython-32bit v3.7.1.0Zero 完整包清单

以下是changelogs/WinPythonZero-32bit-3.7.1.0.md的完整内容。清单分为两部分:Tools(工具,空)与 Python packages(Python 包,26 个条目)。

2.1 Tools(独立工具)

本变体不含任何独立工具:

NameVersionDescription

2.2 Python packages(内置 Python 包)

NameVersionDescription
Python3.7.1Python programming language with standard library
brotli1.0.7Python binding of the Brotli compression library
cloudpickle0.6.1Extended pickling support for Python objects
dask0.20.0Minimal task scheduling abstraction
docopt0.6.2Pythonic argument parser, that will make you smile
idlex1.18IDLE Extensions for Python
jedi0.13.1An autocompletion tool for Python that can be used for text editors
joblib0.12.5Lightweight pipelining: using Python functions as pipeline jobs.
locket0.2.0File-based locks for Python for Linux and Windows
parso0.3.1A Python Parser
partd0.3.9Appendable key-value storage
pip18.1A tool for installing and managing Python packages
prompt_toolkit2.0.7Library for building powerful interactive command lines in Python
ptpython2.0.4Python REPL build on top of prompt_toolkit
pygments2.2.0Generic syntax highlighter for general use in all kinds of software
pyodbc4.0.24DB API Module for ODBC
python_snappy0.5.3Python library for the snappy compression library from Google
pythonnet2.4.0.dev0.Net and Mono integration for Python
qtpy1.5.2Provides an abstraction layer on top of the various Qt bindings (PyQt5, PyQt4 and PySide) and additional custom QWidgets.
setuptools40.5.0Download, build, install, upgrade, and uninstall Python packages - easily
six1.11.0Python 2 and 3 compatibility utilities
sqlite_bro0.8.11a graphic SQLite Client in 1 Python file
toolz0.9.0List processing tools and functional utilities
wcwidth0.1.7Measures number of Terminal column cells of wide-character codes
wheel0.32.2A built-package format for Python.
winpython1.11.20181031WinPython distribution tools, including WPPM (package manager)

2.3 按功能分组解读

这 26 个包并非随意拼凑,而是围绕"可离线开箱、可轻量科学计算、可优雅交互"三个目标精心挑选的:

基础运行时与打包工具

  • Python 3.7.1:发行版的核心,携带标准库;
  • pip 18.1、setuptools 40.5.0、wheel 0.32.2:构成完整的包安装、构建与分发闭环,保证用户拿到发行版后可以立即用pip install扩充环境;
  • winpython 1.11.20181031:WinPython 发行版自带的工具包(含 WPPM——WinPython 包管理器),负责在发行版内部导航已提供包、从内置 Wheelhouse 安装包以及注册 WinPython 环境。

轻量科学计算与数据处理

  • dask 0.20.0:提供"最小任务调度抽象",支持把大数据计算拆分为任务图并行执行;
  • cloudpickle 0.6.1:扩展 pickle,支持对闭包、交互式定义的对象做序列化,是分布式计算的重要支撑;
  • joblib 0.12.5:轻量级流水线工具,支持把 Python 函数作为 pipeline 作业并做内存/磁盘缓存;
  • toolz 0.9.0:列表处理与函数式工具集,常与 dask 搭配使用;
  • partd 0.3.9:可追加的键值存储,作为 dask 的磁盘后端;
  • locket 0.2.0:基于文件的进程锁,用于 Windows/Linux 下的并发保护。

压缩库绑定

  • brotli 1.0.7:Google 的 Brotli 压缩库的 Python 绑定;
  • python_snappy 0.5.3:Google Snappy 压缩库的 Python 绑定。二者组合提供了高压缩比(Brotli)与高吞吐(Snappy)两档选择。

开发者体验与交互式编辑

  • jedi 0.13.1与parso 0.3.1:前者是面向文本编辑器的自动补全工具,后者是其底层的 Python 解析器;
  • pygments 2.2.0:通用语法高亮器;
  • prompt_toolkit 2.0.7与ptpython 2.0.4:前者是构建强大交互式命令行的基础库,后者是基于它实现的 Python REPL,提供补全、语法高亮、多行编辑等体验;
  • idlex 1.18:为 Python 自带 IDLE 提供扩展;
  • wcwidth 0.1.7:计算终端中宽字符所占列数,保证交互界面对齐正确。

系统集成与数据访问

  • pyodbc 4.0.24:标准 DB API 的 ODBC 实现,可连接各类关系型数据库;
  • pythonnet 2.4.0.dev0:Python 与 .Net/Mono 互操作集成;
  • qtpy 1.5.2:在 PyQt5、PyQt4、PySide 等 Qt 绑定之上提供抽象层,并附带自定义 QWidgets,让代码不绑定具体 Qt 绑定实现;
  • sqlite_bro 0.8.11:单文件实现的图形化 SQLite 客户端;
  • docopt 0.6.2:Python 风格的命令行参数解析器;
  • six 1.11.0:Python 2/3 兼容工具库。

三、Zero 系列版本演进:从 3.7.0.0 到 3.7.1.0

仓库中保留了 Zero 变体相邻版本的完整清单(3.7.0.0、3.7.0.2、3.7.1.0),三份清单逐列对比,可以清晰还原该变体约一年内的演进脉络:

包3.7.0.0(b4)3.7.0.23.7.1.0
Python3.7.03.7.03.7.1
brotli1.0.21.0.41.0.7
cloudpickle0.5.20.5.50.6.1
dask0.17.20.18.20.20.0
docopt0.6.20.6.20.6.2
idlex—1.18(新增)1.18
jedi0.11.10.12.10.13.1
joblib0.110.12.20.12.5
locket0.2.00.2.00.2.0
parso0.1.10.3.10.3.1
partd0.3.80.3.80.3.9
pip9.0.318.018.1
prompt_toolkit1.0.151.0.152.0.7
ptpython0.410.412.0.4
pygments2.2.02.2.02.2.0
pyodbc4.0.234.0.244.0.24
python_snappy—0.5.3(新增)0.5.3
pythonnet——2.4.0.dev0(新增)
qtpy—1.5.0(新增)1.5.2
setuptools39.0.140.2.040.5.0
six1.11.01.11.01.11.0
sqlite_bro0.8.110.8.110.8.11
toolz0.9.00.9.00.9.0
wcwidth0.1.70.1.70.1.7
wheel—0.31.1(新增)0.32.2
winpython1.10.201804041.10.201808271.11.20181031

从中可以看到几个典型规律:

  1. 版本号的语义:3.7.1.0的前两位是 Python 主次版本(3.7),第三位跟随 Python 补丁版本(3.7.1),末位是 WinPython 构建号;3.7.0.0 还带b4(第四个 beta 发布级别),而 3.7.0.2 与 3.7.1.0 已进入正式发布。这与 winpython/make.py 中winpython_version_name = f"{python_full_version}.{build_number}{flavor}{release_level}"的拼接逻辑完全吻合。
  2. 增量演进而非全量重构:docopt、locket、pygments、six、sqlite_bro、toolz、wcwidth七个包在三个版本中版本号完全不变,说明它们是 Zero 变体"稳定底座"的一部分;而pip(9.0.3→18.1)、prompt_toolkit(1.0.15→2.0.7)、ptpython(0.41→2.0.4)经历了大版本跨越。
  3. 能力持续增强:3.7.0.2 新增idlex、python_snappy、qtpy、wheel,3.7.1.0 又新增pythonnet,使 Zero 变体从"纯精简"逐步覆盖了压缩、Qt 抽象层与 .Net 互操作等能力。

四、这份清单是如何自动生成的:WPPM 的 Package Index 机制

这类发布包清单不是手工维护的 Markdown,而是由仓库内的 WPPM 工具链自动生成。核心实现在 wppm/wppm.py 中:

  • get_package_index_data()(第 83 行起)收集三类数据:distribution(发行版身份)、tools(独立工具)、packages(Python 包)与wheelhouse(内置 Wheel 仓库);
  • 发行版身份由环境变量决定:WINPYVER2提供 Python 完整版本,WINPYFLAVOR提供 flavor(如Zero),WINPYVER提供发布级别(如b4)。源码中的组合逻辑my_winpyver2 + my_flavor即生成3.7.1.0Zero这样的版本串;
  • generate_package_index_markdown()(第 116 行起)把数据渲染成我们看到的 Markdown 模板:## {name} {version}标题、The following packages are included in {name}-{architecture}bit v{version}引言、Tools/Python packages/WheelHouse packages三个分节表格。这正是changelogs/WinPythonZero-32bit-3.7.1.0.md的版面来源——文档中 Tools 分节为空,说明该发行版工具列表为空;文档没有 WheelHouse 分节,说明该版本未附带独立 Wheelhouse。

值得注意的是wppm.py中is_winpython = my_winpyver2 != ""的判断:只有携带WINPYVER2的环境才会被标记为 WinPython 发行版,否则被当作普通 Python——这保证了清单生成的准确性,避免把纯 Python 安装误标为 WinPython。

五、用 wppm.diff 复现 Changelog 与版本对比

wppm/diff.py 提供了从清单生成 Changelog 的完整命令行工具链,其约定与本文文档一一对应:

  • changelog_versions()(第 129 行起):用WinPython{flavor}-{architecture}bit-{version}模式扫描 changelogs 目录,把文件名交给 PEP 440 版本解析器排序——所以 3.7.1.0 这样的版本能正确参与大小比较;
  • find_previous_version()(第 153 行起):自动找到目标版本之前最近的已发布版本,作为差异对比的基线;
  • compare_package_indexes()(第 169 行起):按Tools、Python packages等分节逐行对比两个版本的包表,生成变更记录;
  • write_changelog()(第 196 行起):把对比结果写入WinPython{flavor}-{architecture}bit-{version}_History.md——这就是 changelogs 目录中WinPythonZero-32bit-3.7.1.0_History.md的生成方式,它记录了 3.7.1.0Zero 相对上一版(3.7.0.2Zero)的逐包变化。

复现本文第三节版本对比的具体命令如下(在仓库根目录执行):

# 对比两个清单文件(默认对比所有分节) python -m wppm.diff changelogs/WinPythonZero-32bit-3.7.0.2.md changelogs/WinPythonZero-32bit-3.7.1.0.md # 只对比 "Python packages" 分节 python -m wppm.diff changelogs/WinPythonZero-32bit-3.7.0.2.md changelogs/WinPythonZero-32bit-3.7.1.0.md --section "Python packages" "Python packages" # 按版本号直接对比,并写入 _History.md 文件 python -m wppm.diff --write-changelog 3.7.1.0 3.7.0.2 changelogs Zero 32

最后一条命令的参数依次为:目标版本3.7.1.0、基线版本3.7.0.2、changelogs 目录、flavorZero、架构32。运行后会在 changelogs 目录生成(或覆盖)WinPythonZero-32bit-3.7.1.0_History.md。

六、从清单到发行版:构建链中的 flavor 落地

理解了清单的含义后,可以顺着构建链把它放回发行版生成流程:

  1. 历史入口 generate_a_winpython_distropy_meta.bat 调用 build_winpython_meta.py,后者解析构建配置(现代配置见 winpython_builds.toml,支持315:slim这类python:flavor选择语法,见select_builds()第 50 行起);
  2. 每个 (Python, flavor) 组合派生出一组路径:requirements、source_dirs(存放 wheel 的目录)、toolsdirs(工具目录)等(见expand_builds()第 22 行起);
  3. winpython/make.py 的WinPythonDistributionBuilder.build()依次完成:解压 Python 压缩包 → 注册wppm.Distribution→ 复制启动器与工具 → 写出scripts/env.ini(含WINPYFLAVOR、WINPYVER、WINPYVER2、WINPYARCH等字段);
  4. 环境启动后,WPPM 读取这些身份字段,即可用 wppm/wppm.py 的包索引机制反向生成我们开篇看到的清单文档。

因此,changelogs/WinPythonZero-32bit-3.7.1.0.md既是 Zero 变体某一时刻的"交付物快照",也是构建链与 WPPM 工具相互配合的产物:构建链决定发行版里装什么,WPPM 负责把"装了什么"以统一、可机器解析、可版本对比的 Markdown 形式沉淀到仓库。

七、使用建议

  • 安装与扩充:WinPython 发行版为便携式设计,拿到 32 位 3.7.1.0Zero 后解压即可使用;内置pip 18.1、setuptools 40.5.0与wheel 0.32.2保证可以立即通过pip install <package>扩充环境,或从内置 Wheelhouse 用 WPPM 安装(README 中明确:pip 是增删包的首选方式,WPPM 用于导航已提供包与注册发行版)。
  • 查看变更:关注changelogs/目录下同一 flavor 的_History.md文件,即可快速定位每次发布升级或新增了哪些包;也可按第五节命令自行对比任意两个版本。
  • 范围限制:Zero 属于历史 flavor(Python 3.7 时代),当前仓库 winpython_builds.toml 的现代构建已转向dot/slim等变体,且构建链要求 Python 3.11+(见 README.rst)。如需还原 Zero 式"零工具、精简包"的发行体验,可在现代构建配置中参考本清单的包选择思路自行裁剪 requirements 文件。
  • 开发工具
  • 构建工具
  • CLI
  • 包管理器

【免费下载链接】winpython

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

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

相关推荐

上一篇:终极FanControl风扇控制指南:3分钟让你的Windows电脑静音又凉爽
下一篇:League Akari:英雄联盟玩家的终极数据助手与自动化工具箱

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

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

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

立即咨询