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

MacOS下Python3.9安装scikit-learn==1.0遇distutils.msvccompiler缺失错误

问题描述

在Mac系统上通过pipenv创建的虚拟环境中安装scikit-learn==1.0时,出现ModuleNotFoundError: No module named 'distutils.msvccompiler'错误。当前setuptools版本为69.5.1,尝试降级到59.1仍未解决,且该错误在Windows系统中不会出现,需了解Mac系统对此问题的影响及解决办法。

完整报错信息:

Collecting scikit-learn==1.0
  Using cached scikit-learn-1.0.tar.gz (7.8 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [23 lines of output]
      Partial import of sklearn during the build process.
      Traceback (most recent call last):
        File "/Users/FFIROUZA/.local/share/virtualenvs/predmaint-5-6S7_mY/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/Users/FFIROUZA/.local/share/virtualenvs/predmaint-5-6S7_mY/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/Users/FFIROUZA/.local/share/virtualenvs/predmaint-5-6S7_mY/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 149, in prepare_metadata_for_build_wheel
          return hook(metadata_directory, config_settings)
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 376, in prepare_metadata_for_build_wheel
          self.run_setup()
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 521, in run_setup
          super().run_setup(setup_script=setup_script)
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 319, in run_setup
          exec(code, locals())
        File "<string>", line 319, in <module>
        File "<string>", line 311, in setup_package
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/numpy/distutils/core.py", line 24, in <module>
          from numpy.distutils.command import config, config_compiler, \
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/numpy/distutils/command/config.py", line 19, in <module>
          from numpy.distutils.mingw32ccompiler import generate_manifest
        File "/private/var/folders/yw/w0vbj__56k7gswchtmvkr_fc0000gp/T/pip-build-env-040c2b1w/overlay/lib/python3.9/site-packages/numpy/distutils/mingw32ccompiler.py", line 29, in <module>
          from distutils.msvccompiler import get_build_version as get_build_msvc_version
      ModuleNotFoundError: No module named 'distutils.msvccompiler'
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
原因分析
  • distutils.msvccompiler是Windows平台专属模块,用于处理MSVC编译器相关逻辑,Mac系统不存在该模块,也不需要它。
  • 报错根源是旧版本scikit-learn==1.0依赖的numpy.distutils存在跨平台兼容性bug:在Mac环境下错误地尝试导入仅Windows可用的模块,触发找不到模块的错误。
解决办法
  • 强制安装预编译wheel包(优先推荐):
    直接跳过源码编译步骤,使用Mac平台预编译的二进制包,执行命令:

    pip install scikit-learn==1.0 --only-binary :all:
    

    该命令会强制pip下载预编译的wheel,避免触发错误的源码构建逻辑。

  • 补全Python环境的distutils组件:

    • 如果用Homebrew安装的Python3.9,重新安装以补全完整组件:
      brew reinstall python@3.9
      
    • 如果是系统自带Python,安装Xcode命令行工具补全编译依赖:
      xcode-select --install
      
  • 升级numpy版本后再安装:
    旧版本numpy.distutils的跨平台判断逻辑有问题,先升级numpy到兼容版本,再安装scikit-learn:

    pip install numpy>=1.21
    pip install scikit-learn==1.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:15:22