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

在Alpine镜像中用pip安装scikit-learn时出现scipy导入错误

在Alpine镜像中构建Python环境时scikit-learn安装失败的解决方法

问题重现

基于Alpine镜像构建包含指定Python库的Docker镜像时,pip install scipy显示安装成功,但执行pip install scikit-learn时触发以下错误:

ImportError: The `scipy` install you are using seems to be broken, (extension modules cannot be imported), please try reinstalling.

相关配置

Dockerfile内容

FROM alpine
WORKDIR /root
COPY setup.sh /root/
RUN ./setup.sh
CMD ["/bin/sh"]

setup.sh内容

#!/bin/sh

set -ex
apk update
apk add --no-cache make cmake gcc g++ gfortran wget openblas-dev python3-dev py3-pip

pip install numpy
pip install pandas
pip install scipy
pip install scikit-learn
pip install requests

安装的包版本

  • numpy-1.23.3
  • pandas-1.5.0
  • scipy-1.9.1
  • scikit-learn-1.1.2

错误原因

Alpine使用musl libc而非主流的glibc,scipy的官方二进制轮子(wheel)基于glibc编译,直接通过pip安装会导致编译后的扩展模块无法在musl环境下正常加载,出现_ccallback_c导入失败的问题。虽然pip提示scipy安装成功,但实际核心扩展模块并未正确兼容。

解决方案

方案1:使用Alpine官方预编译包

Alpine软件源提供了适配musl的scipy和scikit-learn预编译包,直接用apk安装可避免编译兼容问题:
修改后的setup.sh:

#!/bin/sh

set -ex
apk update
# 直接安装系统预编译的scipy、scikit-learn,同时保留必要编译依赖
apk add --no-cache make cmake gcc g++ gfortran wget openblas-dev python3-dev py3-pip py3-scipy py3-scikit-learn

# 安装其他需要的Python包
pip install numpy==1.23.3 pandas==1.5.0 requests

方案2:强制使用musl兼容的Python轮子

指定pip优先使用预编译的musl兼容轮子,避免本地编译带来的兼容问题:
修改setup.sh中的pip安装段:

pip install numpy pandas
# 强制使用二进制轮子安装scipy和scikit-learn
pip install scipy --only-binary :all:
pip install scikit-learn --only-binary :all:
pip install requests

若仍失败,可尝试降低scipy和scikit-learn版本,选择有明确musl兼容轮子的版本号。

方案3:安装glibc兼容层

在Alpine中添加glibc兼容层,让基于glibc编译的Python轮子可以正常运行:
在setup.sh开头添加兼容层安装命令:

# 安装glibc兼容层
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk
apk add glibc-2.35-r0.apk

之后再执行原有的pip安装流程即可。

验证方法

构建镜像后进入容器,执行以下命令验证安装:

python3 -c "import scipy; import sklearn; print('scipy version:', scipy.__version__); print('sklearn version:', sklearn.__version__)"

无报错则说明安装成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:55:22