- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
本篇技术指南以 WinPython 开源仓库中 changelogs/WinPython-3.4.3.1_History.md 为蓝本,系统梳理该版本自 3.4.2.4 以来的全部软件包变更——8 个新增包、28 个升级包、3 个移除包,并深入源码层讲解这份 changelog 是如何由 wppm/diff.py 与 winpython/build_winpython.py 自动生成的。读完后,你既能快速掌握 WinPython 3.4.3.1 的完整包组成与各包用途,也能学会用wppm -diff自行对比任意两个版本的包索引。
WinPython 3.4.3.1:一次以 Python 3.4.3 为核心的迭代
WinPython 是一款面向 Windows 平台的免费 Python 发行版,其核心特色是随附预编译的科学计算包(prebuilt packages for Scientific Python)。3.4.3.1 是继 3.4.2.4 之后的常规迭代版本,最重要的一项升级是Python 解释器从 3.4.2 升级到 3.4.3(changelogs/WinPython-3.4.3.1.md 中可看到解释器版本列),同时整个科学计算栈(NumPy/SciPy/matplotlib)与开发工具链(Cython、pip、setuptools、Spyder)均随之更新。
从版本命名规则看(参考 winpython/build_winpython.py 第 262-268 行的版本拼接逻辑),3.4.3.1的含义是:Python 3.4.3 + WinPython 构建号 1。仓库中 winpython/make.py 的winpython_version_name属性也印证了这一格式:{python_full_version}.{build_number}{flavor}{release_level},即3.4.3.1由 Python 全版本号3.4.3与构建号1组合而成。
新增包:8 个全新成员补齐功能拼图
本次新增的 8 个包覆盖了证书管理、C 语言互操作、数据校验、Markdown 解析、科学计算文档化与代码重构等领域,具体如下:
| 包名 | 版本 | 用途 |
|---|---|---|
| certifi | 14.5.14 | 提供 Mozilla 的 CA 证书捆绑包(Python 包形式) |
| cffi | 0.8.6 | C 语言外部函数接口(FFI),供 Python 调用 C 代码 |
| jsonschema | 2.4.0 | Python 实现的 JSON Schema 校验 |
| mistune | 0.5 | 纯 Python 实现的极速 Markdown 解析器 |
| numpy | 1.9.2rc1+mkl | 数值数组处理核心库(捆绑 Intel MKL 数学库) |
| numpydoc | 0.5 | Sphinx 扩展,支持 NumPy 格式 docstring |
| pycparser | 2.10 | 纯 Python 的 C 语言解析器 |
| rope_py3k | 0.9.4.post1 | Python 重构库(支持 Python 3) |
这几个新包在功能上环环相扣,值得特别说明:
- cffi 与 pycparser 是一对组合:cffi 提供声明式 C 接口绑定,而 pycparser 作为其底层依赖,负责解析 C 头文件生成抽象语法树(AST),让 cffi 得以在纯 Python 层面完成 C 类型与函数的对接,无需手写扩展模块。
- numpy 1.9.2rc1+mkl 取代了 numpy-MKL 1.9.1:这是一个重要的包组织变化。旧版以独立的
numpy-MKL分发,新版则直接以带+mkl本地版本标识的 numpy 形式随附(详见下方"移除包"一节)。 - numpydoc 补齐文档生态:配合仓库中已随附的 Sphinx(3.4.3.1 中为 1.2.3,见 changelogs/WinPython-3.4.3.1.md),让科学计算代码可以按 NumPy 约定的 docstring 格式自动生成 API 文档。
升级包:28 个包的版本跃迁与背后考量
本次共升级 28 个包,从版本号跨度最大的几个(oct2py 2.4.0 → 3.1.0、reportlab 3.1.8 → 3.1.44、python_dateutil 2.3 → 2.4.0、mysql_connector_python 1.2.3 → 2.0.3、setuptools 11.3.1 → 12.3)可以看出,3.4.3.1 是一次覆盖面很广的刷新。按技术领域归类如下:
科学计算与数据分析
| 包名 | 版本变化 | 说明 |
|---|---|---|
| scipy | 0.15.0 → 0.15.1 | 科学计算库(高等数学、信号处理、优化、统计) |
| matplotlib | 1.4.2 → 1.4.3 | 2D 绘图库(可嵌入 PyQt GUI) |
| numba | 0.16.0 → 0.17.0 | 基于 LLVM 的 Python 即时编译 |
| llvmlite | 0.2.1 → 0.2.2 | LLVM 基础功能的轻量封装(numba 的底层依赖) |
| lmfit | 0.8.0 → 0.8.3 | 带边界与约束的最小二乘拟合 |
| mahotas | 1.2.3 → 1.2.4 | 计算机视觉库 |
| Cython | 0.21.2 → 0.22 | 让编写 C 扩展像写 Python 一样简单 |
| pandas、statsmodels 等 | 保持(见索引) | 配套科学计算生态维持兼容 |
交互计算与开发工具
| 包名 | 版本变化 | 说明 |
|---|---|---|
| ipython | 2.3.1 → 2.4.1 | 增强型 Python Shell |
| spyder | 2.3.2 → 2.3.3 | 科学 Python 开发环境(IDE) |
| pyzmq | 14.4.1 → 14.5.0 | 基于 ZeroMQ 的极速消息库(IPython Qt 控制台依赖) |
| tornado | 4.0.2 → 4.1 | 可扩展非阻塞 Web 服务器(IPython notebook 依赖) |
| pip | 6.0.6 → 6.0.8 | Python 包安装与管理工具 |
| setuptools | 11.3.1 → 12.3 | 包构建/安装/升级/卸载工具集 |
| pylint | 1.4.0 → 1.4.1 | 代码质量静态分析 |
| astroid | 1.3.2 → 1.3.4 | 从 Python ast 重建抽象语法树(pylint 依赖) |
| pep8 | 1.5.7 → 1.6.2 | Python 风格检查器 |
| rope_py3k | 0.9.4 → 0.9.4.post1(随新增条目显示为升级) | 重构库补丁版本 |
| runipy | 0.1.1 → 0.1.3 | 命令行运行 IPython notebook |
| julia | 0.1.1.6 → 0.1.1.8 | Python 到 Julia 语言的接口 |
Web、数据处理与互操作
| 包名 | 版本变化 | 说明 |
|---|---|---|
| requests | 2.5.1 → 2.5.3 | 人性化的 HTTP 客户端库 |
| lxml | 3.4.1 → 3.4.2 | 基于 libxml2/libxslt 的 XML 处理库 |
| XlsxWriter | 0.6.5 → 0.6.6 | 生成 Excel XLSX 文件的模块 |
| reportlab | 3.1.8 → 3.1.44 | PDF 生成库 |
| python_dateutil | 2.3 → 2.4.0 | datetime 标准库的强力扩展 |
| mysql_connector_python | 1.2.3 → 2.0.3 | 纯 Python 实现的 MySQL 驱动 |
| rpy2 | 2.5.4 → 2.5.5 | Python 到 R 语言的接口(内嵌 R) |
| oct2py | 2.4.0 → 3.1.0 | Python 到 GNU Octave 的桥(运行 m 文件) |
| scilab2py | 0.5 → 0.6 | Python 到 Scilab 的桥 |
| psutil | 2.2.0 → 2.2.1 | 跨平台进程与系统资源信息接口 |
| colorama | 0.3.2 → 0.3.3 | 跨平台终端彩色文本 |
| husl | 4.0.0 → 4.0.1 | 人性化 HSL 色彩空间 |
| Pygments | 2.0.1 → 2.0.2 | 通用语法高亮器 |
| ipython_sql | 0.3.4 → 0.3.5 | IPython 中的 SQL 魔术命令 |
值得注意的依赖联动:pyzmq 与 tornado 的升级服务于 IPython 2.4.1——pyzmq 是 IPython Qt 控制台的消息通道,tornado 是 IPython notebook 的 Web 后端,三者协同升级保证了交互体验的一致性;numba 0.17.0 依赖 llvmlite 0.2.2,两者同步推进。这正是 WinPython"预编译科学计算包"发行模式的体现:仓库将存在依赖关系的包统一选版并随发行版整体发布,避免用户自行装配时的版本冲突。
移除包:3 个条目的组织性调整
本次移除了 3 个条目:
| 包名 | 原版本 | 说明 |
|---|---|---|
| numpy-MKL | 1.9.1 | NumPy 的 MKL 独立分发形态 |
| pyreadline | 2.0 | IPython 在 Windows 命令行下显示彩色文本所需模块 |
| rope_py3k-0.9.4 | 1 | 重构库的旧版本条目 |
这三项移除并非功能退化,而是包组织方式的演进:
- numpy-MKL 被 numpy 1.9.2rc1+mkl 替代:MKL(Intel Math Kernel Library)加速能力被直接整合进 numpy 主包的本地版本号(
+mkl)中,不再需要单独的numpy-MKL分发渠道。对比 changelogs/WinPython-3.4.3.1.md 第 58 行numpy 1.9.2rc1+mkl与历史版本即可确认这一合并。 - pyreadline 随 IPython 升级而不再必需:IPython 2.4.1 已不再依赖 pyreadline 在 Windows 命令窗口显示彩色文本(readline 支持改由其他机制提供)。
- rope_py3k 的去重:同名的 0.9.4 旧条目被移除,统一由 0.9.4.post1 条目承担。
从 wppm/diff.py 第 61-74 行的compare_packages逻辑看,"移除"的判定标准是某个包名出现在旧索引但未出现在新索引,与"升级"(新旧索引中包名相同但版本号不同)是严格区分的三类集合——这正是本 changelog 三个小节(New / Upgraded / Removed)的直接来源。
源码视角:这份 changelog 是如何生成的
changelog 不是手写维护的,而是构建流水线的产物。理解其生成机制,可以帮你判断如何正确阅读与复用这些历史文档。
生成入口:构建流程的 Step 7
在 winpython/build_winpython.py 第 312-347 行的 Step 7 中,构建脚本完成以下动作:
- 先由
wppm.Distribution().generate_package_index_markdown()生成当前版本的完整包索引(即WinPython-3.4.3.1.md这类文件,函数实现在 wppm/wppm.py 第 116-132 行); - 再调用
diff.compare_package_indexes(changelog_version, searchdir=..., flavor=..., architecture=...),与 changelogs 目录中按版本自动寻找到的上一个版本做对比,写出_History.md。
compare_package_indexes的头部生成逻辑(wppm/diff.py 第 169-182 行)正是本文档开头那句The following changes were made to WinPython distribution since version 3.4.2.4的来源——version1由find_previous_version从 changelogs 目录的文件名解析得到。
对比算法:三分类的核心逻辑
wppm/diff.py 第 61-74 行的compare_packages是核心算法,它对新旧两个索引做归一化(包名统一为小写并把-替换为_,见第 62 行),然后:
added:只存在于新索引的包 →New packagesupgraded:两索引都存在但版本不同的包 →Upgraded packages,并按old_version → new_version的箭头格式输出removed:只存在于旧索引的包 →Removed packages
包条目的解析则依赖PackageIndex._parse_index(wppm/diff.py 第 46-59 行),它从包索引 Markdown 的Name | Version | Description表格行中提取name | version | description三元组。
版本定位:PEP 440 与find_previous_version
find_previous_version(wppm/diff.py 第 153-160 行)通过正则WinPython{flavor}-{architecture}bit-(.+)\.(?:txt|md)$扫描 changelogs 目录(wppm/diff.py 第 141 行),对每个文件名中的版本串用packaging.version.parse做 PEP 440 解析,再取小于目标版本的最大者作为对比基准。仓库的 tests/test_diff_versions.py 用大量合成目录验证了这一行为的边界:
_History.md伴生文件永远不会被当作候选版本(第 69-76 行);- 带发布级别(b1/b2/rc1/a1/post1)的版本可被正确排序(第 60-67 行),例如
3.14.7.0 < 3.14.7.1b1 < 3.14.7.1; - 不同 flavor(如 dot 与 dotf、slim)之间互不可见(第 97-115 行),32 位与 64 位各自独立成线(第 125-132 行)。
手动对比:wppm -diff命令
如果你不想等待构建流程,可以直接用 wppm 的 diff 子命令对比任意两个版本的包索引。命令形式见 wppm/diff.py 第 208-221 行的 usage 说明,以及在 wppm/wppm.py 第 348-349 行注册的-diff参数:
# 对比任意两个包索引(方向无所谓,输出会按 old → new 正确排列) wppm -diff WinPython-3.4.2.4.md WinPython-3.4.3.1.md # 或直接以模块方式运行 python -m wppm.diff WinPython-3.4.2.4.md WinPython-3.4.3.1.md # 只对比 "Python packages" 小节 python -m wppm.diff WinPython-3.4.2.4.md WinPython-3.4.3.1.md --section python python # 按版本号对比(从 changelogs 目录自动定位前一个版本) python -m wppm.diff 3.4.3.1 3.4.2.4 changelogs "" 64值得一提的是,升级行的箭头→对输出编码有特殊要求:在 Windows 的 cp1252 控制台环境下,直接打印会触发 UnicodeEncodeError,因此 wppm/diff.py 第 223-227 行在入口处强制将 stdout 重配置为 UTF-8。这也解释了为什么_History.md文档中的升级条目都统一使用→而非->。
包索引与历史文档的配套关系
仓库 changelogs 目录下每个版本都有两个配套文件:
WinPython-X.Y.Z.md(包索引):该版本最终包含的完整包清单(Tools / Python packages / WheelHouse packages 三个小节),例如 changelogs/WinPython-3.4.3.1.md 展示了 3.4.3.1 随附的全部工具(gettext 0.14.4、SciTE 3.3.7、MinGW32 4.9.2)与全部 Python 包(含 pandas 0.15.2、scikit_learn 0.15.2、statsmodels 0.6.1、PyQt4 4.11.3 等本次未变动的包);WinPython-X.Y.Z_History.md(变更历史):从上一个版本到本版本的增量差异,即本文档主体。
两者的关系可通过wppm -md命令动态复现:Distribution.generate_package_index_markdown()(wppm/wppm.py 第 116-132 行)会渲染出与仓库中包索引同格式的 Markdown,再交给 diff 模块与历史版本对比。因此,任何时刻你都可以基于当前安装的 WinPython 环境重新生成一份"增量变更报告",而不必依赖仓库中已提交的历史文件。
阅读建议:如何从 changelog 中提取关键信息
结合本仓库的构建与测试代码,读这类 changelog 时有三个要点:
- 关注版本跨度大的条目:升级幅度(如 oct2py 2.4.0 → 3.1.0、reportlab 3.1.8 → 3.1.44)通常意味着 API 变更或新功能引入,升级前应阅读对应包的发行说明;
- 留意依赖联动:pyzmq/tornado 与 ipython、llvmlite 与 numba 是同一批次升级的,这种"成组升级"是 WinPython 保持环境一致性的典型策略;
- 区分组织性变更与功能性变更:numpy-MKL → numpy+mkl、rope_py3k 条目去重属于打包组织调整,不代表功能增删;真正的功能性变化集中在新增的 cffi/pycparser 组合、jsonschema 与 mistune 等新成员上。
结语
WinPython 3.4.3.1 作为 Python 3.4 时代的一次常规迭代,通过 8 个新包、28 个升级包与 3 个移除包,完成了一次从解释器(Python 3.4.3)到科学计算栈(NumPy/SciPy/matplotlib)、再到开发工具(Cython、pip、Spyder、IPython)的全链路刷新。更重要的是,这份 changelog 本身就是仓库自动化能力的缩影——从 wppm/diff.py 的三分类对比算法,到 winpython/build_winpython.py 的 Step 7 集成,再到 tests/test_diff_versions.py 对 PEP 440 版本排序的严格约束,整个"索引生成 → 版本定位 → 差异对比 → 文档输出"的链路在源码中清晰可循,也让wppm -diff成为你跨版本追踪包演进的得力工具。
- 开发工具
- 构建工具
- 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 3.4.3.1
开发工具构建工具CLI包管理器WinPython 2.7.9.4 更新历史全解析:新增 6 包、升级 19 包的变更清单与 wppm diff 生成机制
WinPython 2.7.9.4 更新历史全解析:新增 6 包、升级 19 包的变更清单与 wppm diff 生成机制 本文以 changelogs/Win
开发工具构建工具CLI包管理器WinPython 2.7.4.0 发行版技术解析:完整包清单、版本变更与 changelog 生成机制
WinPython 2.7.4.0 发行版技术解析:完整包清单、版本变更与 changelog 生成机制 WinPython 2.7.4.0 是该项目针对 Wi
开发工具构建工具CLI包管理器
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考