
NumPy 1.21.5 维护版本发布解读11 项 bug 修复、构建加固与 Python 3.7–3.10 支持清单【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy导读本文基于 NumPy 仓库的官方发布说明 1.21.5-notes.rst系统梳理 1.21.5 这个维护版本maintenance release的全部变更内容它修复了 1.21.4 之后发现的一批数组核心功能缺陷、构建系统问题与 F2PY 兼容性问题同时通过构建验证与开发流程加固来延长 1.21.x 分支的生命周期。读完本文你将清楚掌握该版本支持哪些 Python 版本、gcc-11 环境下编译的注意事项以及每一个合并 PR 所针对的具体问题并能在仓库源码与测试中找到对应佐证。版本定位与适用范围NumPy 1.21.5 属于 1.21.x 系列的维护性补丁版本其目标是在不引入新特性的前提下修复 1.21.4 发布之后发现的一批 bug并做必要的维护工作以延长 1.21.x 分支的生命周期。该版本的关键约束条件如下项目说明版本类型维护版本maintenance release无新特性支持 Python 版本3.7 – 3.10编译器注意事项若使用 gcc-11 自行编译需使用gcc-11.2以避免编译问题合并 PR 数11 个贡献者人数7 人其中 Rohit Goswami 为首次贡献特别值得强调的是 gcc-11 的编译门槛如果读者需要从源码构建该版本应当确认编译器版本不低于 gcc 11.2否则可能触发已知的编译问题。这一约束在后续 1.21.6 等版本说明中同样延续属于 1.21.x 生命周期内的固定注意事项。核心数组功能修复该版本最值得关注的修复集中在 NumPy 的数组核心路径对应numpy/_core目录涉及einsum、结构化 dtype 与类型别名对象三处。修复 float16 einsum 快速路径使用错误临时变量PR #20462np.einsum在内部针对常见 dtype 会走专门的快速路径fastpath以获得更好的性能而本次修复正是针对 float16f2快速路径中**使用了错误的临时变量wrong tempvar**导致结果不正确的缺陷。仓库测试 test_einsum.py 中专门保留了test_einsum_sums_float16用例对f2dtype 的求和路径进行回归验证同文件中第 924 行附近的注释也明确记载该测试最初是为覆盖 float16 路径缺陷gh-20305而添加。从测试结构看1.21.5 之后einsum的 float16 求和必须与 float32、float64、longdouble 等路径一样通过check_einsum_sums的逐 dtype 校验这直接对应本次快速路径临时变量错误的修复。修复创建对齐空结构化 dtype 失败PR #20466结构化 dtypestructured dtype用于将多个字段打包进一个数组元素。当使用alignTrue请求字段对齐时NumPy 会在字段之间插入填充padding。本次修复解决了创建对齐且为空的结构化 dtype 时直接失败的问题。对应回归测试位于 test_dtype.py 的test_aligned_empty其注释明确指出这是针对 gh-19696 的回归测试覆盖两种等价写法dt np.dtype([], alignTrue) assert dt np.dtype([]) dt np.dtype({names: [], formats: [], itemsize: 0}, alignTrue) assert dt np.dtype([])即空字段列表配合alignTrue时应得到一个与普通空 dtype 等价的合法 dtype而不是抛出异常。测试同时验证了子数组字段在对齐时的对齐属性一致性见同文件的test_alignment。对于依赖结构化 dtype 做协议解析、内存布局控制的用户这一修复消除了创建阶段的崩溃风险。不再转发_GenericAlias的__copy__/__deepcopy__调用PR #20357该 PR 属于类型系统维护MAINT调整了 NumPy 对 Python 标准库typing中_GenericAlias对象的复制行为——不再将其__copy__/__deepcopy__调用向前转发以避免复制np.ndarray[...]这类泛型别名时产生异常行为。从源码结构看numpy/_core/src/multiarray下的 descriptor.c、methods.c 与 scalartypes.c.src 均涉及该对象的相关处理可见它贯穿 dtype 描述、数组方法与标量类型多处修复价值在于让类型别名对象的复制语义更符合预期。构建与分发修复这一组 PR 主要针对源码编译与发行包的构建可靠性对从源码安装的用户影响最直接。强制npymath尊重npy_longdoublePR #20465npymath是 NumPy 自带的数学库其中长双精度long double的处理需要与平台类型定义保持一致。该 PR 强制npymath尊重npy_longdouble类型避免在特定平台尤其是 long double 与 double 精度不同的架构上出现类型不匹配。仓库中的 npy_longdouble.h 定义了npy_longdouble_to_PyLong与npy_longdouble_from_PyLong两个内部 API用于在 long double 与 Pythonlong整数之间转换结果向零取整并强调 long double 具有比 double 更大的数值范围。1.21.5 的这一修复让这些数学转换在构建期统一使用npy_longdouble类型标识从源码结构看这是对跨平台数学库类型一致性的一次收敛。构建前验证 C 编译能力PR #20464该 PR 属于构建系统BLD加固在正式编译流程启动之前先验证当前环境是否具备编译 C 源码的能力。这可以提前暴露工具链缺失或配置错误而不是等到编译中途才失败从而改善在全新环境如 CI、Docker中从源码构建 NumPy 的报错体验。可执行文件不存在时打印操作系统错误信息PR #20463该 PR 同时涉及 bug 修复与分发BUG, DIST当调用某个可执行文件而该文件不存在时不再只抛出笼统的失败而是打印出操作系统层的错误信息如 No such file or directory帮助开发者快速定位是路径拼写错误还是依赖工具未安装。更新 wheel 以支持 Python 3.10PR #20495作为维护项MAINT该 PR 将构建 wheel 所使用的打包工具更新到支持 Python 3.10 的版本。结合本版本声明支持 Python 3.7–3.10 的前提这确保了官方 wheel 在 Python 3.10 环境下可正常安装运行是 1.21.x 生命周期延长的直接体现之一。F2PY 相关修复F2PY 是 NumPy 中连接 Python 与 Fortran 代码的工具位于 numpy/f2py 目录本版本包含两处与它相关的改动。F2PY 转换中正确清除错误PR #20497该 PR 修复 F2PY 在类型转换过程中错误状态未被正确清除的问题。在 C 扩展的转换逻辑中如果上一次转换残留了 Python 错误标志error flag后续调用可能被污染导致难以定位的异常行为。本次修复确保 F2PY 的转换代码在合适时机清除错误状态属于典型的边界条件 bug 修复。提供替代npy_load_module的便利函数PR #20467该 PR 属于增强ENH提供一个新的便利函数以替代内部使用的npy_load_module。这类模块加载辅助函数用于在扩展模块中按名称加载 Python 模块替换意味着更清晰的职责划分与更易维护的导入路径属于为后续版本内部重构打基础的维护性增强。开发流程与生态兼容最后两个 PR 面向开发工作流与下游生态的稳定性。添加 warningfilter 修复 pytest 工作流PR #20613作为开发流程修复DEV该 PR 为 pytest 工作流添加警告过滤器warningfilter使 CI 中因警告被升级为错误-W error等策略而失败的任务恢复正常。这保证了 1.21.x 分支的持续集成测试在较新依赖环境下依然可以稳定运行。帮助 boost::python 库至少不再崩溃PR #20618该 PR 是维护项MAINT调整某些行为使依赖boost::python的下游库至少不再崩溃。它并非完整的兼容层实现而是缓解性的兼容处理避免 NumPy 与 boost::python 库交互时发生崩溃体现了维护版本对下游生态的保守兼容态度。升级与验证建议对于仍停留在 1.21.x 分支的用户建议升级到 1.21.5 以获取上述修复。可通过包管理工具安装或升级pip install numpy1.21.5安装后可验证版本号import numpy as np print(np.__version__) # 期望输出 1.21.5若需要在 gcc-11 环境下从源码构建请务必确保编译器版本不低于 11.2Python 环境应处于 3.7–3.10 区间。对于结构化 dtype 与einsum(float16)相关的应用升级后可通过运行仓库自带测试确认修复生效python -m pytest numpy/_core/tests/test_dtype.py::TestDTypeMeta::test_aligned_empty python -m pytest numpy/_core/tests/test_einsum.py -k float16测试路径以仓库内实际测试类结构为准。延伸阅读官方发布说明原文doc/source/release/1.21.5-notes.rst1.21.x 系列其余版本的发布说明可参见 doc/source/release 目录下对应的1.21.x-notes.rst历史变更记录汇总doc/changelog/1.21.5-changelog.rst核心数组实现与测试numpy/_core/src/multiarray 与 numpy/_core/tests长双精度数学库类型定义npy_longdouble.hF2PY 工具源码numpy/f2py【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考