现场是这样的。为了用新库把 numpy 升到 2.0.1,import 时报 A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0,出错的是自己编译的扩展和 opencv。

中间走过弯路,把「部分包的依赖约束写成 numpy<3,pip 直接放行」当成主因,改完现象没变。

把日志和配置对完,能解释这个现象的基本就这几处。按 numpy 1.x ABI 编译的扩展在 2.0 下加载不了;C 扩展没有重新编译,二进制接口对不上;二进制轮子与源码编译包混装在同一环境。

上来先看 numpy 与相关包的版本

pip show numpy

强制重装走官方轮子

pip install --force-reinstall --no-cache-dir opencv-python

或者退回 1.26 先保业务

pip install "numpy<2"

冒烟确认没有 ABI 警告

python -c "import numpy,cv2;print(numpy.__version__,cv2.__version__)"

改之前先确认了最近有没有人动过配置,避免白查一遍。

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

别只看报错消失,验证要多做一步。import 时不再出现 ABI 警告,扩展输出与升级前一致,pip check 没有冲突报告。

容器里常见两套 numpy 目录并存,先 python -c “import numpy;print(numpy.__file__)” 确认加载路径再动手。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189