M1 Mac导入sklearn报No module named 'numpy.random.bit_generator'错误
问题背景
在Macbook Air M1设备上参考教程完成opencv、tensorflow等机器学习工具安装后,验证opencv、tensorflow均可正常运行,但尝试导入sklearn时触发报错。
参考的教程明确指定了numpy与python的对应版本,查询解决方案时看到有升级numpy的建议,但担心升级numpy会导致已安装的OpenCV等其他库无法正常运行,不确定是否应该执行升级操作。
当前环境版本信息
- Python:3.8.6
- numpy:1.18.5
- scikit-learn:1.1.1
- scipy:1.8.1
报错日志
File ~/miniforge3/envs/ml/lib/python3.8/site-packages/scipy/stats/distributions.py:11, in <module> 8 from ._distn_infrastructure import (rv_discrete, rv_continuous, rv_frozen) 10 from . import _continuous_distns ---> 11 from . import _discrete_distns 13 from ._continuous_distns import * 14 from ._discrete_distns import * File ~/miniforge3/envs/ml/lib/python3.8/site-packages/scipy/stats/_discrete_distns.py:21, in <module> 17 from ._distn_infrastructure import ( 18 rv_discrete, _ncx2_pdf, _ncx2_cdf, get_distribution_names, 19 _check_shape) 20 import scipy.stats._boost as _boost ---> 21 from ._biasedurn import (_PyFishersNCHypergeometric, 22 _PyWalleniusNCHypergeometric, 23 _PyStochasticLib3) 25 class binom_gen(rv_discrete): 26 r"""A binomial discrete random variable. 27 28 %(before_notes)s (...) 51 52 """ File _biasedurn.pyx:1, in init scipy.stats._biasedurn() ModuleNotFoundError: No module named 'numpy.random.bit_generator'
故障原因
报错核心为依赖版本不匹配:当前安装的scipy 1.8.1、scikit-learn 1.1.1最低要求numpy版本≥1.19.0,numpy.random.bit_generator是numpy 1.19版本后才对外开放的公共接口,现有numpy 1.18.5版本不存在该模块,因此触发导入错误。
修复步骤
不需要直接升级到最新版numpy打破现有环境兼容,按以下操作即可:
- 先备份现有可用的ml环境,避免操作失误导致原有opencv、tensorflow不可用:
conda create -n ml_backup --clone ml - 激活原ml环境,安装兼容全量依赖的numpy版本即可:
该版本为Python 3.8适配的稳定版,同时兼容M1芯片miniforge架构、opencv、tensorflow以及当前安装的scipy、scikit-learn,不会触发依赖冲突。conda activate ml conda install numpy=1.21.6 - 升级完成后依次验证库导入:
无报错即修复完成。如果出现兼容问题,可直接删除损坏环境从备份恢复:import cv2 import tensorflow as tf import sklearnconda remove -n ml --all conda create -n ml --clone ml_backup
注意:不要直接用pip安装最新版numpy,M1芯片下pip安装的numpy可能存在架构不兼容问题,优先使用conda安装对应版本。
内容的提问来源于stack exchange,提问作者Zahid Sakib
相关产品推荐
相关产品推荐

