You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scikit-learn构建及运行时触发numpy循环导入报错

问题成因

两个异常表现本质是同一个根因,和Python模块导入的路径优先级规则直接相关:

  1. 构建阶段出现Partial import of sklearn during the build process提示,是因为执行构建命令时,当前工作目录正处于scikit-learn的源码目录范围内,构建流程还没完成全量编译、文件部署的环节,Python就已经把当前目录下未完成初始化的sklearn源码识别为可导入模块,提前触发了部分导入逻辑。这个提示不代表安装失败,只要最后弹出安装成功的提示,部署到site-packages的核心功能文件是完整的,但这个提示本身就说明当前环境的模块搜索路径存在优先级异常。
  2. 在sklearn的utils文件夹下运行导入numpy的脚本触发循环导入,同样是路径优先级导致的:Python执行脚本时,会默认把脚本所在的当前工作目录放到sys.path搜索列表的最高优先级,sklearn的utils子目录下的初始化文件、编译阶段生成的临时文件,刚好和numpy导入链路中要加载的模块存在命名重叠,Python会优先加载当前目录下未完成初始化的sklearn内部文件,打乱numpy和sklearn的正常导入顺序,直接触发循环引用。离开该目录后,Python不会把sklearn的源码子目录放到高优先级搜索位,会直接从site-packages路径加载已经完成安装的正式版numpy、sklearn模块,导入流程就可以正常执行。

截图里的盘符差异不影响问题判断,和异常本身没有关联。

解决方法
  • 修正构建scikit-learn的操作方式:执行安装命令前,先把终端工作目录切换到scikit-learn源码文件夹之外的路径,通过绝对路径/相对路径指定源码位置执行安装,比如源码存放在D:/code/scikit-learn,就先切到D:/code目录再执行pip install ./scikit-learn,不要进入scikit-learn源码根目录或子目录执行安装命令,从根源避免构建过程中提前导入未完成编译的源码文件,partial import的提示会直接消失。
  • 遵守Python脚本运行的通用规则:不要在任何第三方库的源码目录、安装目录(包括scikit-learn的任意层级子文件夹)下运行自己编写的Python脚本,把个人代码存放到独立的工作目录下再执行,就能避免工作目录占位导致的模块搜索优先级错乱,循环导入报错会直接消失。
  • 路径校验(可选排查步骤):如果完成上述操作后仍有异常,先执行两次pip uninstall scikit-learn -y清理环境内残留的多版本sklearn,重新安装完成后,在独立工作目录启动Python交互环境,执行import sklearn; print(sklearn.__file__),确认输出路径是当前Python环境的site-packages目录下的sklearn路径,而非你自行下载的源码目录路径,就说明模块搜索优先级已经恢复正常。

内容的提问来源于stack exchange,提问作者debasish behera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:33:20