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

Python 3.11.0下无法通过Poetry安装scikit-learn的问题

安装scikit-learn遇KeyError: 'headers'问题解决

环境配置

poetry: 1.2.2
pyenv: 2.3.5-3-g0726e02e
python: 3.11.0
目标安装版本scikit-learn: 1.1.2

问题现象

执行poetry add scikit-learn时触发元数据生成错误,核心报错如下:

Preparing metadata (pyproject.toml): still running...
Preparing metadata (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error

× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [273 lines of output]
    Partial import of sklearn during the build process.
    setup.py:128: DeprecationWarning:
    
      `numpy.distutils` is deprecated since NumPy 1.23.0, as a result
      of the deprecation of `distutils` itself. It will be removed for
      Python >= 3.12. For older Python versions it will remain present.
      It is recommended to use `setuptools < 60.0` for those Python versions.
      ....
      ....
      ....
    self.finalize_unix()
        File "/tmp/pip-build-env-go8f9tm1/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/install.py", line 498, in finalize_unix
          self.select_scheme("posix_prefix")
        File "/tmp/pip-build-env-go8f9tm1/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/install.py", line 528, in select_scheme
          return self._select_scheme(resolved)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-go8f9tm1/overlay/lib/python3.11/site-packages/setuptools/_distutils/command/install.py", line 537, in _select_scheme
          setattr(self, attrname, scheme[key])
                                  ~~~~~~^^^^^
    KeyError: 'headers'
    [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

已尝试操作

  • 执行poetry run pip install setuptools==59.8.0降级setuptools,但再次执行poetry add scikit-learn时,Poetry会自动将setuptools升级至65.0.x版本,导致安装失败。
  • 环境中单独安装numpy、pandas、scipy等库无问题,无需降级setuptools。

解决方法

方法1:锁定setuptools版本到pyproject.toml

  1. 在项目的pyproject.toml中添加setuptools的版本锁定:
[tool.poetry.dependencies]
# 保留你已有的其他依赖,新增以下行
setuptools = "==59.8.0"
  1. 执行poetry lock --no-update生成锁定文件,避免Poetry自动升级setuptools。
  2. 最后执行poetry add scikit-learn==1.1.2完成安装。

方法2:指定构建环境的setuptools版本

在pyproject.toml中添加构建系统配置,强制构建时使用指定版本的setuptools:

[build-system]
requires = ["setuptools==59.8.0", "wheel"]
build-backend = "setuptools.build_meta"

配置完成后直接执行poetry add scikit-learn==1.1.2即可。

方法3:升级Poetry版本

你当前使用的Poetry 1.2.2版本较旧,可能存在依赖处理逻辑缺陷。执行以下命令升级到最新稳定版:

poetry self update

升级后再尝试poetry add scikit-learn==1.1.2,新版本Poetry可能自动兼容这类依赖冲突。

方法4:直接安装预编译轮子包

如果上述方法都无效,绕开元数据构建流程,直接用pip安装预编译的scikit-learn轮子包:

poetry run pip install scikit-learn==1.1.2 --only-binary :all:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:30:52