NumPy 移除 `numpy.typing.mypy_plugin`:平台无关静态类型标注时代的迁移指南

📅 发布时间:2026/9/20 1:18:32
NumPy 移除 `numpy.typing.mypy_plugin`:平台无关静态类型标注时代的迁移指南
科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载导读本文围绕 NumPy 官方变更记录 31931.expired.rst 展开解析numpy.typing.mypy_plugin这一 mypy 插件从诞生、弃用到最终被移除的完整生命周期。读者将理解该插件原本解决什么问题、为何官方判定其未真正影响类型安全并予以移除以及如何将现有 mypy 配置迁移到平台无关、类型检查器无关的静态类型标注方案确保项目在升级 NumPy 后类型检查行为平稳过渡。一、变更记录原文解读一次过期的 API 移除doc/release/upcoming_changes/目录是 NumPy 的新闻片段news fragment存放区每个文件按PR 编号.类型.rst命名最终由 towncrier 汇入发布说明。其中expired类型专指移除已弃用的 API见 README.rst。本次变更的原始记录 31931.expired.rst 全文如下Thenumpy.typing.mypy_pluginmypy plugin (deprecated since NumPy 2.3) did not affect type-safety and has been removed in favor of platform- and type-checker-agnostic static typing.这句话包含三个关键事实被移除对象numpy.typing.mypy_plugin一个曾经随 NumPy 分发的 mypy 插件移除理由官方认定该插件没有影响类型安全did not affect type-safety即它并未带来实际的安全收益替代方向平台无关platform-agnostic、类型检查器无关type-checker-agnostic的静态类型标注——即纯.pyistub 方案不再依赖任何特定类型检查器的插件机制。二、历史回顾mypy 插件当初为何而生2.1 引入背景NumPy 1.21PR #17843NumPy 的整数与浮点类型中存在一批平台相关精度的类型例如np.int_、np.intp、np.longlong其实际位宽随编译平台与操作系统而变。在早期 stub 中这些类型无法表达真实精度mypy 只能将其推断为typing.Any导致类型检查形同虚设。为弥补这一缺口NumPy 1.21 通过 PR #17843 引入了numpy.typing.mypy_plugin见 1.21.0-notes.rst 与 1.21.0-changelog.rst由插件在类型检查阶段自动为这些平台相关类型分配正确精度。启用方式是在 mypy 配置文件中声明插件[mypy] plugins numpy.typing.mypy_plugin官方明确指出插件使用完全是可选的但若不启用上述类型的精度将被推断为typing.Any。2.2 能力扩展NumPy 1.22PR #18322NumPy 1.22 通过 PR #18322 对插件进行了扩展它开始移除当前平台不可用的扩展精度类型标注见 1.21.0-notes.rst。例如在 x86-64 平台上插件会移除np.float128的注解该类型在部分平台不可用。同时 1.22.0-changelog.rst 记录了 PR #19062让插件额外处理np.ctypeslib.c_intp的平台相关精度推断。也就是说插件一度承担了三大职责职责引入版本对应 PR推断平台相关np.number子类精度如np.int_、np.intp、np.longlong1.21#17843移除当前平台不可用的扩展精度类型如np.float1281.22#18322推断np.ctypeslib.c_intp的平台相关精度1.22#19062三、为何弃用并最终移除3.1 弃用阶段NumPy 2.3PR #28129 / #28134NumPy 2.3 的发布说明 2.3.0-notes.rst 在 Deprecations 章节正式弃用该插件Thenumpy.typing.mypy_pluginhas been deprecated in favor of platform-agnostic static type inference. Please removenumpy.typing.mypy_pluginfrom thepluginssection of your mypy configuration. If this change results in new errors being reported, kindly open an issue.同期 2.3.0-changelog.rst 记录了两个相关 PR#28129弃用 mypy_plugin与#28134The sequel即跟进处理并出现#28962TYP: type-testing without the mypy plugin让 NumPy 自身的类型测试摆脱对该插件的依赖。3.2 移除的根本原因当前版本结合本次 31931.expired.rst 的表述移除决策基于两条技术判断插件未真正提升类型安全。它主要解决的是平台相关类型精度的推断问题但这类推断并不改变类型系统的安全性结论官方据此认定其未affect type-safetystub 体系已足够成熟。NumPy 2.x 的静态类型标注已能通过类型别名、泛型与位宽抽象numpy._typing中的位宽相关定义见 _nbit_base.pyi在 stub 层直接表达平台相关语义不再需要借助 mypy 专属的插件钩子。因此从当前版本起numpy.typing命名空间中已不存在mypy_plugin模块——在当前仓库中搜索该符号已无任何源码命中这与插件已被移除的变更记录一致。四、迁移指南清理 mypy 配置对于在 mypy 配置文件中启用了该插件的项目升级到当前 NumPy 版本后需要执行以下操作4.1 从配置中移除插件声明删除 mypy 配置文件mypy.ini、setup.cfg、pyproject.toml或.mypy.ini中的plugins项# 迁移前会产生配置错误或警告 [mypy] plugins numpy.typing.mypy_plugin # 迁移后直接移除该行即可 [mypy] strict true4.2 验证类型检查结果移除插件后原插件负责的两类推断将回归 stub 默认行为平台相关类型的精度不再由插件动态注入平台不可用的扩展精度类型不再被插件删除。官方在 2.3 弃用说明中的建议是若移除插件后出现新的类型错误应作为问题反馈给 NumPy 项目2.3.0-notes.rst。实际迁移时可先运行一次完整类型检查将新旧报告对比确认差异均符合预期。4.3 与NBitBase弃用的联动需要提醒的是NumPy 2.3 同期还弃用了numpy.typing.NBitBase类型见 2.3.0-notes.rst它此前被用作类型参数的上界以表示位宽。两者同属平台相关精度推断这一技术路线的组成部分迁移时建议一并检查代码中是否直接引用NBitBase。五、仓库中的类型测试基础设施供参考当前仓库的静态类型体系在 numpy/typing 与 numpy/_typing 目录下组织可作为理解平台无关静态标注落地形态的入口numpy/typing/tests/test_typing.py类型测试主文件配合tests/data/pass/、tests/data/fail/、tests/data/reveal/三组用例分别验证应通过应报错应推导出的类型numpy/typing/tests/data/mypy.iniNumPy 自用测试的 mypy 配置开启strict True、disallow_any_unimported True等严格选项——注意其中没有plugins项印证官方测试已彻底脱离 mypy 插件numpy/_typing/_nbit_base.pyi位宽抽象相关类型定义是平台无关静态类型推断在 stub 层的具体实现载体。六、总结numpy.typing.mypy_plugin的移除是 NumPy 类型标注策略演进的自然结果它曾在 1.211.22 阶段填补平台相关精度的类型盲区但随着 2.x stub 体系的成熟官方判定其不再影响类型安全并选择以平台无关、类型检查器无关的静态标注取而代之。对使用者而言本次变更的实操动作只有一个——从 mypy 配置的plugins段删除numpy.typing.mypy_plugin并重新运行类型检查验证结果。这一调整同时意味着NumPy 的静态类型支持不再绑定特定类型检查器的插件机制mypy、pyright 等工具都能基于同一套 stub 获得一致的类型体验。赞分享科学计算数据分析【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址https://gitcode.com/gh_mirrors/nu/numpy点击查看免费下载相关推荐NumPy 2.5.0 移除 numpy.distutils 后的构建系统迁移指南NumPy 2.5.0 移除 numpy.distutils 后的构建系统迁移指南 numpy.distutils 是 NumPy 长期用于构建 C/Fortr科学计算数据分析53AI Hub开发者手册API接口详解与二次开发实战53AI Hub开发者手册API接口详解与二次开发实战 53AI Hub是一个开源AI门户能够帮助开发者快速构建可运营级别的AI门户用于启动和运营AI代理人工智能AI 应用后端前端RAG高级优化技巧如何将maxvit_nano_rw_256.sw_in1k模型压缩到极致高级优化技巧如何将maxvit_nano_rw_256.sw_in1k模型压缩到极致 想要在移动设备和边缘计算设备上部署AI模型maxvit_nano_rw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考