- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
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(独立工具)
本变体不含任何独立工具:
| Name | Version | Description |
|---|
2.2 Python packages(内置 Python 包)
| Name | Version | Description |
|---|---|---|
| Python | 3.7.1 | Python programming language with standard library |
| brotli | 1.0.7 | Python binding of the Brotli compression library |
| cloudpickle | 0.6.1 | Extended pickling support for Python objects |
| dask | 0.20.0 | Minimal task scheduling abstraction |
| docopt | 0.6.2 | Pythonic argument parser, that will make you smile |
| idlex | 1.18 | IDLE Extensions for Python |
| jedi | 0.13.1 | An autocompletion tool for Python that can be used for text editors |
| joblib | 0.12.5 | Lightweight pipelining: using Python functions as pipeline jobs. |
| locket | 0.2.0 | File-based locks for Python for Linux and Windows |
| parso | 0.3.1 | A Python Parser |
| partd | 0.3.9 | Appendable key-value storage |
| pip | 18.1 | A tool for installing and managing Python packages |
| prompt_toolkit | 2.0.7 | Library for building powerful interactive command lines in Python |
| ptpython | 2.0.4 | Python REPL build on top of prompt_toolkit |
| pygments | 2.2.0 | Generic syntax highlighter for general use in all kinds of software |
| pyodbc | 4.0.24 | DB API Module for ODBC |
| python_snappy | 0.5.3 | Python library for the snappy compression library from Google |
| pythonnet | 2.4.0.dev0 | .Net and Mono integration for Python |
| qtpy | 1.5.2 | Provides an abstraction layer on top of the various Qt bindings (PyQt5, PyQt4 and PySide) and additional custom QWidgets. |
| setuptools | 40.5.0 | Download, build, install, upgrade, and uninstall Python packages - easily |
| six | 1.11.0 | Python 2 and 3 compatibility utilities |
| sqlite_bro | 0.8.11 | a graphic SQLite Client in 1 Python file |
| toolz | 0.9.0 | List processing tools and functional utilities |
| wcwidth | 0.1.7 | Measures number of Terminal column cells of wide-character codes |
| wheel | 0.32.2 | A built-package format for Python. |
| winpython | 1.11.20181031 | WinPython 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.2 | 3.7.1.0 |
|---|---|---|---|
| Python | 3.7.0 | 3.7.0 | 3.7.1 |
| brotli | 1.0.2 | 1.0.4 | 1.0.7 |
| cloudpickle | 0.5.2 | 0.5.5 | 0.6.1 |
| dask | 0.17.2 | 0.18.2 | 0.20.0 |
| docopt | 0.6.2 | 0.6.2 | 0.6.2 |
| idlex | — | 1.18(新增) | 1.18 |
| jedi | 0.11.1 | 0.12.1 | 0.13.1 |
| joblib | 0.11 | 0.12.2 | 0.12.5 |
| locket | 0.2.0 | 0.2.0 | 0.2.0 |
| parso | 0.1.1 | 0.3.1 | 0.3.1 |
| partd | 0.3.8 | 0.3.8 | 0.3.9 |
| pip | 9.0.3 | 18.0 | 18.1 |
| prompt_toolkit | 1.0.15 | 1.0.15 | 2.0.7 |
| ptpython | 0.41 | 0.41 | 2.0.4 |
| pygments | 2.2.0 | 2.2.0 | 2.2.0 |
| pyodbc | 4.0.23 | 4.0.24 | 4.0.24 |
| python_snappy | — | 0.5.3(新增) | 0.5.3 |
| pythonnet | — | — | 2.4.0.dev0(新增) |
| qtpy | — | 1.5.0(新增) | 1.5.2 |
| setuptools | 39.0.1 | 40.2.0 | 40.5.0 |
| six | 1.11.0 | 1.11.0 | 1.11.0 |
| sqlite_bro | 0.8.11 | 0.8.11 | 0.8.11 |
| toolz | 0.9.0 | 0.9.0 | 0.9.0 |
| wcwidth | 0.1.7 | 0.1.7 | 0.1.7 |
| wheel | — | 0.31.1(新增) | 0.32.2 |
| winpython | 1.10.20180404 | 1.10.20180827 | 1.11.20181031 |
从中可以看到几个典型规律:
- 版本号的语义:
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}"的拼接逻辑完全吻合。 - 增量演进而非全量重构:
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.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 落地
理解了清单的含义后,可以顺着构建链把它放回发行版生成流程:
- 历史入口 generate_a_winpython_distropy_meta.bat 调用 build_winpython_meta.py,后者解析构建配置(现代配置见 winpython_builds.toml,支持
315:slim这类python:flavor选择语法,见select_builds()第 50 行起); - 每个 (Python, flavor) 组合派生出一组路径:
requirements、source_dirs(存放 wheel 的目录)、toolsdirs(工具目录)等(见expand_builds()第 22 行起); - winpython/make.py 的
WinPythonDistributionBuilder.build()依次完成:解压 Python 压缩包 → 注册wppm.Distribution→ 复制启动器与工具 → 写出scripts/env.ini(含WINPYFLAVOR、WINPYVER、WINPYVER2、WINPYARCH等字段); - 环境启动后,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.
相关推荐
WinPython Zero 精简版解析:32 位 3.6.6.1 发行内容与 Changelog 生成机制
WinPython Zero 精简版解析:32 位 3.6.6.1 发行内容与 Changelog 生成机制 导读 本文以 changelogs/WinPyth
开发工具构建工具CLI包管理器WinPython Zero 32 位 3.6.7.0 发行版包清单深度解析:Zero 风味、内置包与 changelog 生成机制
WinPython Zero 32 位 3.6.7.0 发行版包清单深度解析:Zero 风味、内置包与 changelog 生成机制 本文围绕仓库 change
开发工具构建工具CLI包管理器Go Web 应用错误处理实战:错误分类、错误页面与 panic/recover 的完整方案
Go Web 应用错误处理实战:错误分类、错误页面与 panic/recover 的完整方案 本指南围绕《build web application with
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考