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

Docker容器已安装依赖却找不到sklearn包的问题求助

问题:Docker运行时找不到sklearn依赖,导入未使用的sklearn时报错

仓库结构

dummy/
  main/
    hello.py
    requirements.txt
  yips/ 
    yips/
      __init__.py
      lol.py
    setup.py
    
  Dockerfile

Dockerfile内容

FROM python:3.9-bullseye

WORKDIR /yips
COPY yips/ ./
RUN pip3 install .

WORKDIR /main
COPY ./main/ .
RUN pip3 install --no-cache-dir -r ./requirements.txt

CMD ["python3", "hello.py"]

问题描述

运行hello.py时会导入Yips库中lol.py的方法,测试时在lol.py中导入了sklearn但未实际使用。requirements.txt包含sklearn和numpy(numpy在hello.py中可正常使用)。运行Docker镜像时提示找不到sklearn,但删除lol.py中的sklearn导入后程序正常运行。曾尝试在安装Yips库前直接执行pip install sklearn,问题依旧。


解决思路

1. 修正Yips库的setup.py依赖声明

由于lol.py中导入了sklearn,需要在Yips库的setup.py中明确声明该依赖,确保安装Yips时自动安装对应包。注意Python包索引中sklearn的正式包名为scikit-learn,而非sklearn:

from setuptools import setup, find_packages

setup(
    name="yips",
    version="0.1",
    packages=find_packages(),
    install_requires=[
        "scikit-learn>=1.0",  # 可根据需求指定版本范围
    ]
)

2. 调整Dockerfile中的安装顺序

先安装所有依赖再安装本地库,避免依赖安装顺序导致的环境异常:

FROM python:3.9-bullseye

# 先安装main模块的依赖
WORKDIR /app
COPY main/requirements.txt ./
RUN pip3 install --no-cache-dir -r requirements.txt

# 再安装Yips本地库
WORKDIR /app/yips
COPY yips/ ./
RUN pip3 install .

# 切换到main目录运行程序
WORKDIR /app/main
COPY main/ .

CMD ["python3", "hello.py"]

3. 修正requirements.txt中的包名

将requirements.txt中的sklearn替换为正式包名scikit-learn,避免别名导致的安装异常:

scikit-learn
numpy

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:55:19