python - 如何升级 dockerfile 中的 pip?

标签 python docker pip

在我们为 python 项目构建图像的 Dockerfile 中,我们有这样一行将 pip 升级到最新版本:

RUN pip install --upgrade pip

这已经运行了一段时间,但最近图像构建开始失败,因为我们使用的是 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 版本时继续工作?

最佳答案

正如您所注意到的,将 pip 升级到 Docker 镜像的每个构建的最新版本并不能保证将来可以重现构建。这不是一个好主意。

采用何种策略取决于您的需求。但是您可能会认为随特定 Python 版本发布的默认 pip 版本是合理的。但是要选择它,您可以确保您的主要 Python 版本 (3.6) 足够最新。这不是你的情况,因为 3.6.1 是一个非常旧的版本。最新的3.6是3.6.13,已经发布2个月了(3.6仍然支持)

来自 https://www.python.org/downloads/

  • Python 3.6.13:2021 年 2 月 15 日
  • Python 3.6.2:2017 年 7 月 17 日
  • Python 3.6.1:2017 年 3 月 21 日

在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.

当你的系统上有 pip 时,这个警告很有用,它在构建的 docker 镜像中的值(value)较小。有多种方法可以禁用此消息,请参阅 How to suppress pip upgrade warning? :

命令行选项

pip --disable-pip-version-check [normal stuff here]

环境变量

export PIP_DISABLE_PIP_VERSION_CHECK=1

pip 配置

pip config set global.disable-pip-version-check true

pip 配置文件(在 $HOME/.config/pip/pip.conf 中)

[global]
disable-pip-version-check = True

关于python - 如何升级 dockerfile 中的 pip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67330440/

相关文章:

python - 获取Gql中包含单词(不区分大小写)的记录?

bash - 如何在 Dockerfile 中运行 bash 函数

docker - 如何运行 docker :dind to start with a shell

docker - 如何让 docker 容器从/etc/motd 加载文本

python - 何时在 setup.py 中使用 pip 需求文件与 install_requires?

python - 是否有现成的 HTTP 服务器用于调试目的?

python - Paramiko 模拟 ssh -t 选项

python - ConnectionRefusedError at/password-reset/[WinError 10061] 由于目标机器主动拒绝而无法建立连接

python - 在服务器中使用 twilio 时出现导入错误 : No module named twilio. 休息

pygame - Travis CI、pip 和 pygame