在我们为 python 项目构建镜像的 Dockerfile 中,我们有这样一行将 pip 升级到最新版本:
RUN pip install --upgrade pip
Run Code Online (Sandbox Code Playgroud)
这已经工作了一段时间了,但最近图像构建开始失败,因为我们使用的是 python 3.6.1,最新版本的 pip (21.1) 现在需要 python >= 3.6.2,否则你会得到一个“ImportError:不能导入名称 NoReturn”,参见https://github.com/psf/black/issues/1666
除了升级我们的 Python 版本来解决这个问题之外,我想知道我们是否真的应该运行这个命令来在 Dockerfile 上下文中升级最新版本,因为这样做时我们不再获得可重现的图像,因为 pip 版本将继续移动,这违背了 Docker 可重现环境的概念。
那么,我们是否应该指定确切的 pip 版本以保持可重现的构建,即使这意味着在某些时候它会过时?或者是否有另一种选择可以确保我们的图像在新的 pip 版本发布时继续工作?
正如您所注意到的,在 Docker 映像的每个构建上将 pip 升级到最新版本并不能保证将来能够重现构建。这不是一个好主意。
采用的策略取决于您的需求。但您可能认为随特定 Python 版本发布的默认 pip 版本是合理的。但要选择它,您可以确保您的主要 Python 版本 (3.6) 足够最新。这不是您的情况,因为 3.6.1 是一个非常旧的版本。最新的3.6是3.6.13,已经发布2个月了(仍然支持3.6)
来自https://www.python.org/downloads/
在 docker build 上更新 pip 的原因通常是当 Pip 不是最新版本时显示的警告
You are using pip version 6.0.8, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Run Code Online (Sandbox Code Playgroud)
当您的系统上有 pip 时,此警告很有用,它在构建的 docker 映像中的价值较小。有多种方法可以禁用此消息,请参阅如何抑制 pip 升级警告?:
CLI 选项
pip --disable-pip-version-check [normal stuff here]
Run Code Online (Sandbox Code Playgroud)
环境变量
export PIP_DISABLE_PIP_VERSION_CHECK=1
Run Code Online (Sandbox Code Playgroud)
点配置
pip config set global.disable-pip-version-check true
Run Code Online (Sandbox Code Playgroud)
Pip 配置文件(在 $HOME/.config/pip/pip.conf 中)
[global]
disable-pip-version-check = True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7180 次 |
| 最近记录: |