numpy 2.0 主动移除 np.int、np.float_、np.bool 等旧api,因其语义模糊、干扰类型注解、破坏跨平台一致性;应分别替换为 int/np.int64、np.float64、np.bool_,并改用 ndarray 类型注解及新c api。

np.int、np.float_、np.bool 这些旧 API 在 NumPy 2.0 中不是“意外消失”,而是被主动移除——它们已无法支撑现代 Python 类型系统和跨平台一致性要求。
为什么 np.int 和 np.float 会直接报 AttributeError
这不是拼写错误或导入失败,是符号已被彻底删除。NumPy 1.20 开始标记弃用,1.24 起不再导出这些名称,2.0 完全清理。
-
np.int平台相关(可能映射为int32或int64),破坏可移植性;标量场景应直接用int,数组 dtype 应明确写np.int64或np.int32 -
np.float不是float的别名,也不等价于np.float64,但名字又暗示“通用浮点”,属于语义模糊设计债务 -
np.bool与 Python 内置bool冲突,类型检查器(如 pyright)无法区分,导致def f(x: np.bool)直接失效
为什么 np.float_ 替换成 np.float64 就行,但不能换 float
替换目标必须是明确精度的 NumPy dtype,否则 dtype 推断会出错或触发隐式转换。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
-
np.array([1.0], dtype=float)→ 实际生成np.float64,但类型注解中float无法被NDArray接受(NDArray[float]报错) -
np.float_原本就恒等于np.float64,所以全局替换成np.float64行为零变化 - 若用于类型注解(如
def f(x: np.float_) -> np.float_:),需改为np.floating(泛型)或np.float64(具体)
为什么改完代码,类型检查器还是报错?
因为 np.ndarray 在 NumPy 2.0 中已不再是类型注解可用的泛型类——你必须显式导入 NDArray,否则所有注解都失效。
-
def f(x: np.ndarray) -> np.ndarray:→ mypy/pyright 直接拒绝,不是警告 - 正确写法:先
from numpy.typing import NDArray,再写def f(x: NDArray[np.float64]) -> NDArray[np.int64]: - 哪怕项目里只有一处用了
NDArray,整个项目的类型检查行为就会切换到 NumPy 2.0 模式,未迁移的旧注解立刻暴露
C 扩展编译失败,常见错误是 undefined symbol: PyArray_GetBuffer
这不是你漏装依赖,是 NumPy 2.0 彻底砍掉了旧 C API 缓冲区路径——ABI 已不兼容,绕不过去。
- 旧调用如
PyArray_GetBuffer、PyArray_ResolveBuffer已从头文件和链接库中移除 - 新路径是组合使用
PyArray_GetArrayParamsFromObject+PyArray_FromAny,且要求输入对象支持标准库memoryview协议 - 检查
numpy.get_include()返回路径是否指向 NumPy 2.0+ 头文件;旧扩展不重写缓冲逻辑,加载时会静默崩溃,而非报错
np.int,而是那些藏在第三方包内部、没更新也没维护的硬编码调用——它们不会出现在你的搜索结果里,也不会在本地测试中浮现,直到 CI 跑到 Windows 或 type-checker 启动才突然崩掉。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










