- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
本文以 WinPython 2.7.10.2 发行版的官方包清单(changelogs/WinPython-2.7.10.2.md)及其变更历史(changelogs/WinPython-2.7.10.2_History.md)为主体,完整收录该版本随附的工具与 147 个 Python 包的名称、版本和用途说明,并逐一解读相对 2.7.10.1 新增、升级与移除的 47 项变更。文中还结合当前仓库的 WPPM 工具链源码,说明这份清单是如何由wppm自动生成的,以及读者可以用哪些命令自行验证任意两个版本之间的差异。
读完本文,你将掌握:WinPython 2.7 时代发行版的完整技术栈构成(NumPy/SciPy 核心、可视化、数据科学、数据库、Web 与工具链)、2.7.10.1 → 2.7.10.2 的逐项版本演进逻辑,以及wppm包索引生成与diff比对机制的实现细节。
需要说明适用前提:WinPython 2.7.10.2 是 2015 年前后发行的 Python 2.7.10 便携版科学计算发行版,属于 WinPython 历史存档;当前仓库的工具链面向 Python 3 现代周期构建(构建环境要求 Python ≥ 3.11,WPPM 自身要求 Python ≥ 3.10,见 README.rst),因此本文的价值在于存档与机制解读,而非可直接套用的现行操作手册。
版本定位:一个什么样的发行版
WinPython 是面向 Windows 的便携版(portable)Python 发行版:解压即用,不写入系统 Python、不污染系统 PATH,自带预编译的科学计算二进制包。2.7.10.2 这个编号对应 Python 2.7.10 语言的第二个修订发布(第 3 位数字是修订号)。
该版本的技术底座在包清单中一览无余:
- Python 2.7.10:语言本体与标准库;
- numpy 1.9.2+mkl:多维数组核心,
+mkl后缀表明链接了 Intel MKL 数学库; - scipy 0.16.0:科学计算库(高级数学、信号处理、优化、统计);
- matplotlib 1.4.3:2D 绘图库(可嵌入 PyQt 创建的 GUI)。
随发行版提供的唯一外部工具是SciTE 3.3.7——基于 Scintilla 引擎的多语言轻量文本编辑器。对比上一版 2.7.10.1(changelogs/WinPython-2.7.10.1.md)的 Tools 区,2.7.10.2 移除了MinGW32 4.9.2(C/C++/Fortran 编译器静态工具链)与gettext 0.14.4(GNU 翻译工具的 Win32 移植),工具面收缩为仅 SciTE,编译需求改由 Python 包层面的mingwpy(见下文“新增包”)承接。
完整包清单:2.7.10.2 随附的全部 Python 包
以下表格完整继承自发行版清单原文,按领域分组编排(组内按字母序),共 147 个包,版本与描述均以 changelogs/WinPython-2.7.10.2.md 为准。
语言核心与包管理工具
| 名称 | 版本 | 描述 |
|---|---|---|
| Python | 2.7.10 | Python 编程语言及标准库 |
| pip | 7.1.0 | 安装与管理 Python 包的工具 |
| setuptools | 17.1.1 | 下载、构建、安装、升级、卸载 Python 包 |
| wheel | 0.24.0 | Python 构建包格式 |
| pkginfo | 1.2.1 | 查询 sdist / bdist / 已安装包中的元数据 |
| twine | 1.5.0 | 与 PyPI 交互的工具集 |
数值计算与科学计算核心
| 名称 | 版本 | 描述 |
|---|---|---|
| numpy | 1.9.2+mkl | NumPy:面向数字、字符串、记录与对象的多维数组处理(SciPy 的核心模块) |
| scipy | 0.16.0 | SciPy:Python 科学计算库(高级数学、信号处理、优化、统计……) |
| sympy | 0.7.6 | 符号数学库 |
| numexpr | 2.4.3 | 基于向量虚拟机的数组表达式快速求值 |
| lmfit | 0.8.3 | 带边界与约束的最小二乘最小化 |
| cvxopt | 1.1.7 | 凸优化库 |
| PuLP | 1.5.9 | Python 线性规划建模器,可调用 GLPK、COIN CLP/CBC、CPLEX、GUROBI 求解 |
| statsmodels | 0.6.1 | 配合 SciPy 使用的统计计算与模型库 |
| patsy | 0.4.0 | 使用符号公式描述统计模型 |
| networkx | 1.9.1 | 图与网络创建、操作库 |
| tables | 3.2.1 | 基于 HDF5 的层次数据集管理包(面向超大数据量) |
| ViTables | 2.1 | 浏览与编辑 HDF5 / PyTables 文件的图形工具 |
| h5py | 2.5.0 | HDF5 文件的通用 Python 接口(直接访问完整 HDF5 C 库) |
| pyhdf | 0.8.3 | HDF4 文件的 Python 接口 |
| netCDF4 | 1.1.9 | netCDF 库(3 与 4 版)的 python/numpy 接口 |
机器学习、深度学习与高性能计算
| 名称 | 版本 | 描述 |
|---|---|---|
| scikit_learn | 0.16.1 | 机器学习与数据挖掘模块集 |
| Theano | 0.7.0 | 在 CPU/GPU 上求值数学表达式的优化编译器 |
| Keras | 0.1.2 | 基于 Theano 的深度学习库 |
| numba | 0.20.0 | 使用 LLVM 编译 Python 代码 |
| llvmlite | 0.6.0 | 基础 LLVM 功能的轻量封装 |
| joblib | 0.8.4 | 轻量级流水线:把 Python 函数当作流水线作业 |
| cyordereddict | 0.2.2 | collections.OrderedDict 的 Cython 实现 |
| cytoolz | 0.7.3 | Toolz 的 Cython 实现:高性能函数式工具 |
| bcolz | 0.10.0 | 列式压缩数据容器 |
并行、分布式数据栈
| 名称 | 版本 | 描述 |
|---|---|---|
| dask | 0.6.1 | 极简任务调度抽象 |
| blaze | 0.8.2 | Blaze(可扩展数据结构项目) |
| datashape | 0.4.6 | 数据描述语言 |
| odo | 0.3.3 | Python 中的数据迁移 |
| partd | 0.3.2 | 可追加的键值存储 |
| locket.py | 0.2.0 | Linux 与 Windows 下的文件锁 |
| greenlet | 0.4.7 | 进程内轻量级并发 |
| xray | 0.5.2 | Python 中的 N 维带标签数组与数据集 |
可视化与 GUI
| 名称 | 版本 | 描述 |
|---|---|---|
| matplotlib | 1.4.3 | 2D 绘图库(可嵌入 PyQt 创建的 GUI) |
| pyqtgraph | 0.9.10 | Python 科学绘图与 GUI 库 |
| seaborn | 0.6.0 | 统计数据可视化 |
| bokeh | 0.9.2 | Python 的统计与新颖交互式 HTML 图表 |
| holoviews | 1.3.2 | 可组合、声明式的数据结构,便于构建复杂可视化 |
| mpld3 | 0.2 | Matplotlib 的 D3 查看器 |
| brewer2mpl | 1.4.1 | 将 ColorBrewer2 色板连接 Python 与 matplotlib |
| husl | 4.0.2 | 面向人类的 HSL(色相-饱和-亮度)色彩模型 |
| PyQt4 | 4.11.4 | Qt 跨平台 GUI 工具包的 Python 绑定 |
| PyQtdesignerplugins | 1.1 | 为 PyQt4 安装 Qt Designer 插件(Matplotlib、guiqwt 等) |
| PyQwt | 5.2.1 | 2D 绘图库(Qwt 库的 Python 绑定,高速绘图) |
| guiqwt | 2.3.2 | 高效曲线/图像绘制与科学数据处理 GUI 工具 |
| guidata | 1.6.2 | 自动生成图形用户界面,便于数据集编辑与显示 |
| formlayout | 1.0.15 | 免 GUI 代码创建参数编辑对话框/控件 |
| PyOpenGL | 3.1.0 | OpenGL 及相关 API 的跨平台 Python 绑定 |
| Polygon2 | 2.0.7 | Python 2 下处理二维多边形形状的包 |
| scikit_image | 0.11.3 | SciPy 的图像处理工具箱 |
| Pillow | 2.9.0 | Python 图像库(PIL 的分支) |
| spyder | 2.3.5.2 | Scientific PYthon Development EnviRonment:交互式计算与数据可视化 IDE |
| ipython | 3.2.1 | 增强版 Python 解释器(shell) |
| pyzmq | 14.7.0 | 基于 ZeroMQ 的轻量极速消息库(IPython Qt console 依赖) |
数据读写与办公格式
| 名称 | 版本 | 描述 |
|---|---|---|
| pandas | 0.16.2 | 数据分析、时间序列与统计的强大数据结构 |
| xlrd | 0.9.4 | 从 Microsoft Excel 表格文件中提取数据 |
| XlsxWriter | 0.7.3 | 创建 Excel XLSX 文件的 Python 模块 |
| simplejson | 3.8.0 | 简洁、快速、可扩展的 JSON 编解码器 |
| PyYAML | 3.11 | Python 的 YAML 解析与生成器 |
| python_dateutil | 2.4.2 | 标准 datetime 模块的强力扩展 |
| pytz | 2015.4 | Python 的世界时区定义 |
| prettytable | 0.7.2 | 以美观 ASCII 表格展示二维数据的简单库 |
| xlsx/json 无关的 db.py | 0.4.4 | “不糟糕的”数据库访问包 |
数据库与消息中间件
| 名称 | 版本 | 描述 |
|---|---|---|
| SQLAlchemy | 1.0.8 | SQL 工具包与对象关系映射器(ORM) |
| pyodbc | 3.0.10 | ODBC 的 DB-API 模块 |
| adodbapi | 2.6.0.7 | 纯 Python 实现、基于 Microsoft ADO 的 PEP 249 DB-API |
| mysql_connector_python | 2.0.4 | Python 编写的 MySQL 驱动 |
| pg8000 | 1.10.2 | PostgreSQL 接口库 |
| pymongo | 3.0.3 | MongoDB 的 Python 驱动 |
| redis | 2.10.3 | Redis 键值存储的 Python 客户端 |
| ipython_sql | 0.3.6 | 经 IPython 访问关系型数据库 |
| sqlparse | 0.1.15 | 非验证式 SQL 解析器 |
| sqlite_bro | 0.8.8 | 单文件图形化 SQLite 客户端 |
| baresql | 0.7.1 | 直接对 Python 数据执行 SQL |
网络、Web 开发与 API
| 名称 | 版本 | 描述 |
|---|---|---|
| requests | 2.7.0 | Apache2 许可、面向人类的 HTTP 库 |
| tornado | 4.2.1 | 可扩展非阻塞 Web 服务器及工具(IPython notebook 依赖) |
| Flask | 0.10.1 | 基于 Werkzeug、Jinja2 与好意(good intentions)的微框架 |
| Werkzeug | 0.10.4 | Python Web 开发的“瑞士军刀” |
| wsgiref | 0.1.2 | WSGI(PEP 333)参考库 |
| itsdangerous | 0.24 | 在不受信环境中传递可信数据的辅助工具 |
| 1.17.0 | Twitter 的 API 与命令行工具集 | |
| beautifulsoup4 | 4.4.0 | 网页抓取库 |
模板引擎与 Markdown 生态
| 名称 | 版本 | 描述 |
|---|---|---|
| Jinja2 | 2.7.3 | 沙盒化模板引擎(类 Django 非 XML 语法,模板编译为可执行 Python 代码) |
| MarkupSafe | 0.23 | Python 的 XML/HTML/XHTML 安全标记字符串 |
| pybars3 | 0.9.1 | Python 2/3 的 Handlebars.js 模板支持 |
| PyMeta3 | 0.5.1 | 基于 Meta 的 Python 2/3 模式匹配语言 |
| pystache | 0.5.4 | Python 的 Mustache |
| Markdown | 2.6.2 | Python 的 Markdown 实现 |
| mistune | 0.7 | 受 marked 启发的纯 Python 最快 Markdown 解析器 |
文档生成
| 名称 | 版本 | 描述 |
|---|---|---|
| Sphinx | 1.3.1 | 以 reStructuredText 为标记语言的文档生成工具 |
| docutils | 0.12 | 将纯文本文档处理为 HTML/LaTeX 等格式(含 reStructuredText) |
| alabaster | 0.7.6 | 可配置侧边栏的 Sphinx 主题 |
| sphinx_rtd_theme | 0.1.8 | ReadTheDocs.org 的 Sphinx 主题(2013 版) |
| numpydoc | 0.5 | 支持 NumPy 风格 docstring 的 Sphinx 扩展 |
| Babel | 1.3 | 国际化工具 |
静态检查、重构与开发辅助
| 名称 | 版本 | 描述 |
|---|---|---|
| pylint | 1.4.3 | Logilab 代码分析模块:查找 Bug 与低质量迹象 |
| astroid | 1.3.6 | 从 Python ast 重建抽象语法树(pylint 依赖) |
| logilab_common | 1.0.2 | Logilab 项目集底层包(pylint 依赖) |
| pyflakes | 0.9.2 | Python 程序被动检查器 |
| pep8 | 1.6.2 | Python 风格指南检查器 |
| rope | 0.10.2 | Python 重构库 |
| nose | 1.3.7 | 基于发现的 unittest 扩展(NumPy 测试模块即使用 nose) |
语言互操作(R / Octave / Scilab / Julia)
| 名称 | 版本 | 描述 |
|---|---|---|
| rpy2 | 2.6.1 | Python 到 R 语言的接口(嵌入式 R) |
| oct2py | 3.3.0 | Python 到 GNU Octave 桥——从 Python 运行 m 文件 |
| scilab2py | 0.6 | Python 到 Scilab 桥 |
| julia | 0.1.1.8 | Python 到 Julia 语言的接口 |
系统、进程与端口
| 名称 | 版本 | 描述 |
|---|---|---|
| psutil | 3.1.1 | 可移植地获取全部进程与系统资源(CPU、磁盘、内存、网络)信息 |
| pyserial | 2.7 | 封装串口访问的库 |
| PyAudio | 0.2.8 | 跨平台音频流库 PortAudio v19 的绑定 |
| pywin32 | 219 | Windows 的 Python 库 |
文本解析、函数式与兼容性
| 名称 | 版本 | 描述 |
|---|---|---|
| pyparsing | 2.0.3 | Python 解析模块 |
| lxml | 3.4.4 | 结合 libxml2/libxslt 与 ElementTree API 的强大 Pythonic XML 库 |
| click | 4.1 | optparse 之上的简单封装,用于构建强力命令行工具 |
| docopt | 0.6.2 | 让你微笑的 Pythonic 参数解析器 |
| dill | 0.2.3 | 序列化几乎所有 Python 对象 |
| multipledispatch | 0.4.8 | 相对合理的 Python 多重分派方案 |
| singledispatch | 3.4.0.3 | 将 Python 3.4 的 functools.singledispatch 带回 2.6–3.3 |
| decorator | 3.4.2 | 用装饰器改善 Python 开发体验 |
| funcsigs | 0.4 | 为 Python 2.6/2.7 与 3.2+ 提供 PEP 362 函数签名 |
| cython | 0.22.1 | 让编写 C 扩展与写 Python 一样简单的语言 |
| six | 1.9.0 | Python 2/3 兼容工具 |
| enum34 | 1.0.4 | 将 Python 3.4 Enum 带回 3.3/3.2/3.1/2.7/2.6/2.5/2.4 |
| configparser | 3.5.0b2 | 将 3.5 的更新版 configparser 带回 2.6–3.5 |
| backports.ssl_match_hostname | 3.4.0.2 | Python 3.4 的 ssl.match_hostname() |
| colorama | 0.3.3 | 跨平台彩色终端文本 |
工具链、打包与杂项
| 名称 | 版本 | 描述 |
|---|---|---|
| mingwpy | 0.1.0b3 | 对 Python 友好的 Windows 编译器工具链 |
| cx_Freeze | 4.3.4 | 把 Python 脚本转换为独立 Windows 可执行文件的部署工具 |
| cffi | 1.1.2 | 调用 C 代码的 Python 外部函数接口 |
| pycparser | 2.14 | Python 中的 C 解析器 |
| fonttools | 2.4 | 字体文件操作工具 |
| TTFQuery | 1.0.5 | 基于 FontTools 的查询系统字体包 |
| reportlab | 3.2.0 | PDF 生成库 |
| pygments | 2.0.2 | 通用语法高亮器 |
| snowballstemmer | 1.2.0 | 提供 16 个 Snowball 词干算法(含 Poerter 英语词干器) |
| nltk | 3.0.4 | 自然语言工具包(NLTK) |
| winpython | 1.1 | WinPython 发行版工具,含 WPPM(包管理器) |
说明:上表按领域分组以便阅读,与原文档的单表一一对应,无增删条目;原文描述中个别笔误(如 SciPy 条目里的双引号)已按原义整理。
相对 2.7.10.1 的变更档案
变更历史(changelogs/WinPython-2.7.10.2_History.md)将本次迭代分为新增、升级、移除三类。总计:新增 15 个包,升级 30 个包,移除 5 个包 + 2 个工具。
工具区变更
移除:
- MinGW32 4.9.2:C/C++ 与 Fortran 编译器(Mingwpy 静态工具链版);
- gettext 0.14.4:GNU gettext Win32 移植(GNU 翻译工具,pygettext 标准库模块的有用工具)。
工具面收窄为仅 SciTE。值得注意的是,编译能力并未完全消失——mingwpy 0.1.0b3作为 Python 包新增进来(“对 Python 友好的 Windows 编译器工具链”),编译工具链的定位从“发行版自带 exe 工具”转向“pip 可管理的 Python 包”,这与发行版保持便携、可再打包的总体取向一致。
新增的 15 个包
- blaze 0.8.2(Blaze)、dask 依赖群:locket.py 0.2.0(Linux/Windows 文件锁)、partd 0.3.2(可追加键值存储)、greenlet 0.4.7(进程内轻量并发)——这批包围绕 dask/Blaze 并行计算栈补齐依赖;
- xray 0.5.2:N 维带标签数组与数据集,N 维科学数据分析的新方向;
- bokeh 0.9.2:交互式 HTML 图表;holoviews 1.3.2+param 1.3.2:声明式、可组合的可视化体系(param 是 holoviews 的声明式参数基座);
- netCDF4 1.1.9:netCDF 3/4 的 python/numpy 接口,面向气象、地球科学领域的数据;
- PyAudio 0.2.8:PortAudio v19 绑定,跨平台音频输入输出;
- Markdown 2.6.2:Python 的 Markdown 实现;
- pystache 0.5.4:Python 的 Mustache 模板;
- twitter 1.17.0:Twitter API 与命令行工具集;
- mingwpy 0.1.0b3:Windows 编译工具链(上文所述,承接被移除的 MinGW32 工具)。
可以看出新增包集中在三条线:并行/分布式数据栈(dask、xray、blaze)、现代可视化(bokeh、holoviews)、以及与主流发行版 2015 年生态对齐的补齐(netCDF4、Markdown、PyAudio)。
升级的 30 个包
- 科学计算核心:scipy 0.15.1 →0.16.0、seaborn 0.5.1 → 0.6.0、nltk 3.0.2 → 3.0.4、tables 3.2.0 → 3.2.1;
- 高性能编译:numba 0.19.2 →0.20.0(配套 llvmlite 0.5.1 → 0.6.0);
- 数据栈:dask 0.5.0 → 0.6.1、datashape 0.4.5 → 0.4.6、odo 0.3.2 → 0.3.3、bcolz 0.9.0 → 0.10.0;
- Web/网络:tornado 4.2 → 4.2.1、click 4.0 → 4.1、mistune 0.5.1 → 0.7;
- 数据库:SQLAlchemy 1.0.5 → 1.0.8、pymongo 3.0.2 → 3.0.3、pyodbc 3.0.9 → 3.0.10;
- 文档工具链:alabaster 0.7.4 → 0.7.6(Sphinx 主题);
- 图像与交互:Pillow 2.8.2 → 2.9.0、ipython 3.2.0 → 3.2.1;
- 语言互操作:rpy2 2.6.0 → 2.6.1、oct2py 3.2.0 → 3.3.0;
- 工具与底层:pip 7.0.3 → 7.1.0、psutil 3.0.0 → 3.1.1、simplejson 3.7.3 → 3.8.0、xlrd 0.9.3 → 0.9.4、logilab_common 0.63.2 → 1.0.2、multipledispatch 0.4.7 → 0.4.8、dill 0.2.2 → 0.2.3、beautifulsoup4 4.3.2 → 4.4.0、Keras 0.1.1 → 0.1.2、patsy 0.3.0 → 0.4.0。
其中numba 0.19.2 → 0.20.0 与 llvmlite 0.5.1 → 0.6.0 的同步升级是典型的“绑定成对升级”:numba 依赖 llvmlite 提供的 LLVM 封装,二者版本必须匹配。
移除的 5 个包
- VPython 5.74:实时 3D 场景模块;
- ggplot 0.6.5:Python 版 ggplot;
- mahotas 1.2.4:计算机视觉库;
- runipy 0.1.3:命令行运行 IPython notebook;
- vispy 0.4.0:交互式可视化。
移除面主要是可视化/3D 类实验性包,与新增的 bokeh/holoviews/xray 形成此消彼长:2.7.10.2 把可视化重心从“3D 实验包”转向“交互式 HTML 与 N 维数据集”。
清单是如何生成的:WPPM 工具链源码解析
仓库中的changelogs/目录存放着历次发行的包索引,_History文件则是相对上一版本的差异。它们的生成逻辑可以直接在仓库源码中读到。
包索引生成:generate_package_index_markdown
构建流程的 Step 7 会调用 WPPM 的包索引生成器(见 winpython/build_winpython.py):
cmd = ["set", f"WINPYVER2={winpyver2}&", "set", f"WINPYFLAVOR={args.flavor}&", "set", f"WINPYVER={winpyver2}{args.flavor}{args.release_level}&", str(target_python), "-X", "utf8", "-c" , ( "from wppm import wppm;" "result = wppm.Distribution().generate_package_index_markdown();" f"open(r'{winpydirbase.parent / mdn}', 'w', encoding='utf-8').write(result)" )] run_command(cmd, shell=True) shutil.copyfile (winpydirbase.parent / mdn, changelog_dir / mdn)其实现位于 wppm/wppm.py:
def generate_package_index_markdown(self, python_executable_directory: str|None = None, winpyver2: str|None = None, flavor: str|None = None, release_level: str|None = None, wheeldir: str|None = None) -> str: """Generates a Markdown formatted package index page.""" data = self.get_package_index_data(python_executable_directory, winpyver2, flavor, release_level, wheeldir) ... return f"""## {d["name"]} {d["version"]} The following packages are included in {d["name"]}-{d["architecture_bits"]}bit v{d["version"]} {d["release_level"]}. {self.render_markdown_for_list("Tools", as_tuples(data["tools"]))} {self.render_markdown_for_list("Python packages", as_tuples(data["packages"]))} {self.render_markdown_for_list("WheelHouse packages", as_tuples(data["wheelhouse"]))} """即:以“目标发行版自身的解释器”运行wppm,枚举已安装包与 wheelhouse,渲染出### Tools/### Python packages(新版还有### WheelHouse packages)分区的 Markdown 表,再复制进changelogs/。本文引用的 2.7.10.2 清单(标题形如The following packages are included in WinPython v2.7.10.2.)属于早期版本按同构格式产出的存档。
变更历史生成:wppm 的 diff 比对
_History文件由 Step 7 的后半段生成(winpython/build_winpython.py),调用wppm.diff.compare_package_indexes(版本, searchdir, flavor, architecture):它与changelogs/中“同风味(flavor)、同架构”的最近一次发行索引做差集。解析与比对逻辑在 wppm/diff.py:
Package类用两种正则兼容 SourceForge 与 Google Code 风格的索引行格式(名称 | 版本 | 描述);PackageIndex按### Tools/### Python packages/### WheelHouse packages三个表头切分区,逐行解析为包对象;compare_packages对包名做规范化(-→_、小写)后,按“新增 / 升级 / 移除”三类输出——这正是 2.7.10.2 History 文件中New packages:/Upgraded packages:/Removed packages:三个小节的来源,升级条目渲染为旧版本 → 新版本。
构建脚本还特别说明(winpython/build_winpython.py 的注释):这份“相对上一版的变化”只留在构建产物旁供发布者自查,不会作为对上一版的 diff 公开发布——因为风味(flavor)在周期间会生灭,读者大约一年升级一次,直接对比任意两份索引更有意义。读者可以任选两份索引自行比对,例如 2.7.10.1 与 2.7.10.2:
python -m wppm -diff changelogs\WinPython-2.7.10.1.md changelogs\WinPython-2.7.10.2.md(-diff用法见构建脚本注释中对wppm -diff <a>.md <b>.md的说明;WPPM 的完整子命令与参数见 README_PYPI.md。)
发行版装配流程概览
从 winpython/build_winpython.py 的main()可以还原一个完整发行版的装配步骤:
- Step 1清理旧构建目录(
delete_folder_if_exists,仅当目录名与风味匹配时); - Step 2由构建环境的
python.exe运行make.make_all,把目标 Python 落地为可移动目录(winpydirbase),并校验存在scripts/env.bat(check_env_bat,winpython/build_winpython.py)——这是 WinPython 便携环境的核心入口:运行时先call scripts\env.bat设定WINPYDIR等变量再使用发行版内的解释器; - Step 3以
--no-index --find-links=<wheelhouse> --upgrade从本地 wheelhouse 离线安装 mandatory 与主 requirements(pip_install,winpython/build_winpython.py),默认--only-binary=:all:保证缺 wheel 时直接失败而非在构建机上现场编译; - Step 4便携化补丁:
wppm.Distribution().patch_standard_packages('', to_movable=True)(patch_winpython)。具体动作可在 wppm/wppm.py 看到:pywin32 的 DLL 拷贝、pip 生成器 shebang 改写(保证 launcher 随目录移动仍可用)、把spyder的check_updates_on_startup从True改为False(“spyder don't goes on internet without you ask”)——最后一条正是 2.7.10.2 随附的 spyder 2.3.5.2 在 WinPython 环境中的行为依据; - Step 5/6处理 wheelhouse 需求并生成带 hash256 的
pylock.*.toml/requir.*.txt锁定文件(generate_lockfiles,同时比对 web 与 local 两条锁的一致性); - Step 7生成本文引用的 changelog 与 History;
- Step 8(可选)用 7-Zip 生成安装器。
这些锁文件与需求文件的产物命名(pylock.64-*.toml、requir.64-*.txt)与仓库中 winpython/portable/ 各构建周期目录下的现存文件一一对应,可以对照阅读以理解“需求 → 锁 → 发行版”的完整链路。
如何核对本文数据
本文全部事实均可在当前仓库内复核:
- 2.7.10.2 完整包清单:changelogs/WinPython-2.7.10.2.md;
- 2.7.10.1 → 2.7.10.2 变更:changelogs/WinPython-2.7.10.2_History.md;
- 上一版索引(用于交叉验证“升级前版本”):changelogs/WinPython-2.7.10.1.md;
- 索引/差异生成实现:wppm/wppm.py、wppm/diff.py;
- 发行版装配与构建参数:winpython/build_winpython.py、入口脚本 generate_a_winpython_distropy_meta.bat。
适用前提与限制再次强调:Python 2.7 已于 2020 年停止维护,文中版本(numpy 1.9.2+mkl、scipy 0.16.0、spyder 2.3.5.2 等)是 2015 年生态的历史快照,其中的链接目标与包能力不应外推到当前版本;若需复现或对比任意两个发行版的包差异,使用仓库内wppm -diff对changelogs/下的索引文件执行即可。
- 开发工具
- 构建工具
- CLI
- 包管理器
【免费下载链接】winpython
A free Python-distribution for Windows platform, including prebuilt packages for Scientific Python.
相关推荐
WinPython 2.7.10.1 发行版包索引解析:科学 Python 便携分发的完整包清单、版本演进与 WPPM 生成机制
WinPython 2.7.10.1 发行版包索引解析:科学 Python 便携分发的完整包清单、版本演进与 WPPM 生成机制 WinPython 2.7.1
开发工具构建工具CLI包管理器Xenova/distilbart-cnn-6-6模型架构深度解析:6层编码器如何实现快速摘要?
Xenova/distilbart cnn 6 6模型架构深度解析:6层编码器如何实现快速摘要? 在当今信息爆炸的时代, 文本摘要技术 已成为处理海量信息的关键
深度学习NLP大模型PyOxy 版本演进史:从 Python Runner 首发到多版本 Python 发行
PyOxy 版本演进史:从 Python Runner 首发到多版本 Python 发行 导读 本文以 pyoxy_history.rst https://li
开发工具CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考