sklearn报错:无法从sklearn.base导入_ClassNamePrefixFeaturesOutMixin
报错信息
运行代码时抛出如下导入错误:
ImportError: cannot import name '_ClassNamePrefixFeaturesOutMixin' from 'sklearn.base' (C:\Users\yunhu\anaconda3\lib\site-packages\sklearn\base.py)
已尝试卸载重装sklearn,问题未解决。
问题原因
_ClassNamePrefixFeaturesOutMixin是scikit-learn 1.2及以上版本才在sklearn.base模块中加入的内部工具类,触发该报错的核心原因只有三类:
- 环境中实际安装的scikit-learn版本低于1.2,但是其他依赖sklearn的第三方库(比如imbalanced-learn、各类sklearn扩展插件)版本是适配高版本scikit-learn的,导入时找不到对应类
- 之前安装sklearn时混用pip、conda多个包管理器,卸载时没有清理干净旧版本的残留文件,单纯覆盖安装导致文件版本不匹配
- 误装了PyPI上名为
sklearn的废弃占位包,该包没有实际代码,会触发各类导入错误
修复步骤
按顺序执行以下操作即可解决问题:
- 彻底清理环境内所有sklearn相关残留
不要只执行单次卸载命令,要把不同渠道安装的版本全部清掉:
命令执行完成后,打开报错信息里提示的site-packages目录(对应你本机路径为# 清理pip渠道安装的相关包 pip uninstall -y scikit-learn sklearn # 清理conda渠道安装的相关包 conda uninstall -y scikit-learn sklearnC:\Users\yunhu\anaconda3\lib\site-packages\),手动删除所有名称以sklearn开头的文件夹,彻底清除残留文件。 - 重新安装正确版本的scikit-learn
anaconda环境优先用conda安装,避免渠道冲突:# 安装1.3稳定版,该版本兼容性最好 conda install scikit-learn=1.3.0 # 如果习惯用pip,执行对应安装命令即可 # pip install scikit-learn==1.3.0注意:不要安装名为
sklearn的包,该包是废弃占位包,无实际功能,正确的包名是scikit-learn - 升级适配的sklearn依赖库
如果你在项目中用到了imbalanced-learn、category_encoders等基于sklearn开发的第三方库,安装完scikit-learn后将这些库升级到最新版本,避免版本不匹配:# 以imbalanced-learn为例,其他库替换包名即可 pip install -U imbalanced-learn - 验证修复结果
执行如下命令验证导入是否正常:
命令执行后如果能正常打印提示文字,说明问题已经修复。python -c "from sklearn.base import _ClassNamePrefixFeaturesOutMixin; print('sklearn环境正常,导入成功')"
日常使用注意:同一个conda环境内尽量固定用同一个包管理器安装sklearn相关依赖,不要混用pip和conda,否则很容易出现版本冲突、文件残留的问题。
内容的提问来源于stack exchange,提问作者Yunhu Kim
相关产品推荐
相关产品推荐

