Numba导入报错提示需NumPy≤1.21 安装对应版本仍不兼容
Numba 1.21版本误报问题修复方案
这个报错是Numba 0.55.1版本自带的版本校验逻辑bug,和Python版本、NumPy实际兼容性无关,不需要反复重建环境或降级NumPy到1.20.x——降级触发的glib报错是低版本NumPy和新系统C库不兼容导致的额外问题,完全可以避免。
根本原因
Numba 0.55.1的_ensure_critical_deps()依赖校验函数中,NumPy版本判断代码存在疏漏:
if numpy_version > (1, 21): raise ImportError("Numba needs NumPy 1.21 or less")
Python元组比较规则为:按索引逐位比较元素,若短元组是长元组的前缀,则短元组值更小。所有1.21.x系列NumPy的版本元组为长度3的(1, 21, 补丁版本号),和长度2的(1, 21)比较时会被判定为更大,因此哪怕是1.21.0版本也会触发误报,和实际版本兼容性无关。
修复方法(按推荐优先级排序)
- 直接升级Numba到已修复该bug的版本,这是最稳妥无侵入的方案:
0.55.2及后续所有Numba版本已将校验逻辑修正为conda install numba>=0.55.2if numpy_version >= (1, 22),可正常兼容NumPy 1.21.x全系列版本,不需要调整现有Python、NumPy安装版本,执行完重启Jupyter内核即可正常使用。 - 若项目要求必须固定使用Numba 0.55.1,可直接修改包内校验代码绕过误报:
- 在当前环境执行以下命令,获取Numba安装路径:
import numba print(numba.__file__) - 打开输出路径同级目录下的
__init__.py文件,定位到_ensure_critical_deps函数内的NumPy版本判断行,将原代码:
修改为:if numpy_version > (1, 21):if numpy_version >= (1, 22): - 保存文件后重启Jupyter内核即可正常导入。
- 在当前环境执行以下命令,获取Numba安装路径:
- 若完成上述操作后仍报错,先执行以下命令排查Jupyter内核混装问题:
如果输出的版本不是当前conda环境安装的1.21.x、或文件路径不在scycom环境目录下,说明Jupyter绑定了其他Python环境,执行import numpy print(numpy.__version__) print(numpy.__file__)conda install ipykernel为当前环境重新注册内核即可。
内容的提问来源于stack exchange,提问作者Jorge Alonso
相关产品推荐
相关产品推荐

