现场是这样的。为了用新库把 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__)” 确认加载路径再动手。这类问题最好一次改到位,反复小改反而容易把原因搅混。
