在AWS SageMaker的Docker容器中Pip无法找到新版ML包
问题解决:Docker构建时无法找到mlforecast==0.13.1版本
问题原因
你的Docker基础镜像是ubuntu:18.04,其默认Python3版本为3.6,但mlforecast==0.13.1要求Python版本**>=3.8**。PyPI只会提供兼容目标Python版本的包,所以在Python3.6环境下,pip只能找到最高支持该版本的mlforecast==0.9.3,这就是版本限制的核心原因。
另外Dockerfile还存在两个额外问题:
- 重复安装
pandas:先指定了pandas==2.2.2,后面又无版本号安装pandas,会导致版本覆盖冲突 scipy==1.2.1和scikit-learn==0.20.2版本过旧,与pandas==2.2.2、torch==2.3.1等新版本包存在依赖兼容性问题
解决方案
1. 升级基础镜像
将基础镜像替换为支持Python3.8+的Ubuntu版本,比如ubuntu:22.04(默认Python3.10),确保满足mlforecast的版本要求。
2. 修复依赖安装命令
合并重复的包安装命令,更新旧版本依赖到兼容新版本的版本,避免冲突。
修改后的Dockerfile示例
FROM ubuntu:22.04 MAINTAINER Amazon AI <sage-learner@amazon.com> RUN apt-get -y update && apt-get install -y --no-install-recommends \ wget \ python3-pip \ python3-setuptools \ nginx \ ca-certificates \ && rm -rf /var/lib/apt/lists/* RUN ln -s /usr/bin/python3 /usr/bin/python RUN ln -s /usr/bin/pip3 /usr/bin/pip # 合并所有依赖安装,去掉重复的pandas,更新旧版本依赖到兼容版本 RUN pip --no-cache-dir install \ mlforecast==0.13.1 \ neuralforecast==1.7.3 \ optuna==3.6.1 \ pandas==2.2.2 \ plotly==5.22.0 \ statsforecast==1.7.6 \ torch==2.3.1 \ utilsforecast==0.1.12 \ scipy==1.10.1 \ scikit-learn==1.2.2 \ flask \ gunicorn ENV PYTHONUNBUFFERED=TRUE ENV PYTHONDONTWRITEBYTECODE=TRUE ENV PATH="/opt/program:${PATH}" COPY decision_trees /opt/program WORKDIR /opt/program
关键修改说明
- 基础镜像升级到
ubuntu:22.04:提供Python3.10,满足mlforecast==0.13.1的Python版本要求 - 合并pip安装命令:避免重复安装
pandas导致版本覆盖 - 更新
scipy和scikit-learn版本:选择与pandas==2.2.2兼容的版本(scipy>=1.9.0、scikit-learn>=1.0) - 修正
PATH环境变量:去掉多余的转义引号,确保路径配置正确
内容的提问来源于stack exchange,提问作者Eric Golub
相关产品推荐
相关产品推荐

