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



我正在用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可以找到的最新版本。我想知道是否有一种方法来做这个编程。就像有一些标志或选项,我可以用来自动安装软件包的最新版本,docker可以找到,如果我在我的需求。txt文件中的版本不存在/找不到?

requirements.txt中不指定任何版本将导致使用最新版本,只要它不冲突。

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

您还必须固定tensorflow/tensorflow图像,就像您现在使用latest一样,那么您不能确定您的需求将来是否可用。

确保在退出容器之前复制requirements.txt文件。