Docker构建失败:安装gymnasium[atari]时ale-py版本匹配错误求助
问题描述
我尝试用以下Dockerfile构建Python镜像:
FROM python:3.10 WORKDIR /app COPY ./requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
requirements.txt内容如下:
DI-engine==0.5.1 gymnasium[atari]
构建时触发如下错误:
ERROR: Could not find a version that satisfies the requirement ale-py~=0.8.1; extra == "atari" (from shimmy[atari]) (from versions: none) ERROR: No matching distribution found for ale-py~=0.8.1; extra == "atari"
我尝试过更换Python 3.8~3.12版本、指定安装ale-py 0.7.6~0.8.1版本、直接安装源码包等方法,均无法解决问题,怀疑Docker环境下的依赖缺失导致无法安装ale-py。
解决方案
1. 补充系统编译依赖
ale-py的安装需要基础编译工具和SDL2等库,官方Python镜像默认未包含这些依赖。修改Dockerfile,先安装系统级依赖:
FROM python:3.10 WORKDIR /app # 安装ale-py编译所需的系统依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ libsdl2-dev \ wget \ unzip \ && rm -rf /var/lib/apt/lists/* COPY ./requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
2. 固定兼容的依赖版本
gymnasium[atari]依赖的shimmy[atari]对ale-py版本的约束可能导致匹配失败,可直接固定一套兼容的依赖版本。修改requirements.txt:
DI-engine==0.5.1 gymnasium[atari]==0.28.1 shimmy[atari]==0.2.1 ale-py==0.8.1
同时配合方案1中的系统依赖安装步骤。
3. 手动安装预编译轮子
如果编译仍然失败,可直接下载对应平台的预编译ale-py轮子安装。以下示例针对Python 3.10 x86_64架构:
FROM python:3.10 WORKDIR /app # 安装预编译的ale-py轮子 RUN pip install https://github.com/Farama-Foundation/Arcade-Learning-Environment/releases/download/0.8.1/ale_py-0.8.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl COPY ./requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
注意根据你的Python版本和镜像架构,选择官方发布页对应的轮子包。
4. 使用现成的Atari环境镜像
如果不想手动处理依赖,可直接使用Farama Foundation提供的预配置镜像:
FROM faramafoundation/atari-py:latest WORKDIR /app COPY ./requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
内容的提问来源于stack exchange,提问作者Geonsu Kim
相关产品推荐
相关产品推荐

