找不到所需版本时自动更改包版本

Automatically changing package version when the desired version cannot be found

我正在使用 requirements.txt 文件构建 Docker 图像。每次我构建图像时,由于某些软件包版本不存在,它总是失败。例如

ARG BASE_CONTAINER=tensorflow/tensorflow
FROM $BASE_CONTAINER


# 2) change to root to install packages
USER root

COPY requirements.txt requirements.txt


# 3) install packages
RUN pip install -r requirements.txt
ERROR: Could not find a version that satisfies the requirement msrestazure==0.5.4 
(from -r requirements.txt (line 66)) (from versions: 0.0.1, 0.0.2, 0.1.0, 0.1.1, 0.1.2,
 0.2.0, 0.2.1, 0.3.0, 0.4.0rc1, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7, 
0.4.8, 0.4.9, 0.4.10, 0.4.11, 0.4.12, 0.4.13, 0.4.14, 0.4.15, 0.4.16, 0.4.17, 0.4.18, 
0.4.19, 0.4.20, 0.4.21, 0.4.22, 0.4.23, 0.4.24, 0.4.25, 0.4.26, 0.4.27, 0.4.28, 0.4.29, 
0.4.30, 0.4.31, 0.4.32, 0.4.33, 0.4.34, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4)
#6 9.178 ERROR: No matching distribution found for msrestazure==0.5.4 (from -r requirements.txt (line 66))

为了解决这个问题,我刚刚将 requirements.txt 中的软件包版本更改为 docker 可以找到的最新版本。我想知道是否有办法以编程方式执行此操作。如果我的 requirements.txt 文件中的版本 exist/cannot 找不到,是否有一些标志或选项可以用来自动安装 docker 可以找到的最新版本的软件包?

requirements.txt 中完全不指定任何版本将导致使用最新版本,前提是它不冲突。

在您的情况下,我建议 运行ning docker run -it tensorflow/tensorflow 在环境中获得交互式 shell,然后在不指定版本的情况下安装所有包。测试它是否有效,如果有效,运行 pip freeze > requirements.txt 生成一个在该环境中有效的新需求文件,以便您的需求可以稳定。

您还必须固定 tensorflow/tensorflow 图片,就像您现在使用 latest 一样,您无法确定您的要求将来是否可用.

确保在退出容器之前copy the requirements.txt file out