python - 为什么在 Docker 镜像中使用 requirements.txt

标签 python docker docker-compose pip requirements.txt

有一个similar question从去年开始,但我认为这些答复没有广泛适用,因此不被接受。

编辑:这是在开发只能在内部 docker 中运行的小型作业的情况下;我不是在谈论与小团队以外的任何人共享工作,也不是在谈论项目得到大量重用。

您认为在 Dockerfile 中使用 requirements.txt 代替 pip install 命令进行安装有什么优势?我看到一个:您的各种项目的 Dockerfile 更千篇一律。

我什至没有考虑使用我链接的问题中设想的设置。

在 Dockerfile 中命名包有什么缺 pip :

 RUN   pip install --target=/build  django==3.0.1 Jinja2==2.11.1 .  . . 

编辑 2:@superstormer 问“将它放入 Dockefile 有什么好处”——这个问题很公平。我在 Gitlab 中阅读了同事的 dockerfiles 并且必须导航到要求,我没有在本地编辑器中找到它。 EDIT3: self 注意:所以克隆它并在编辑器中查看它。

最佳答案

首先考虑顺应工具流程:

  • 要在 Docker 容器内部或外部手动安装这些包,或者要在不构建新 Docker 镜像的情况下测试它是否工作,请执行 pip install -r requirements.txt。您不必复制/粘贴软件包列表。
  • 要“卡住”特定版本的包以提高构建的可重复性,pip freeze 将为您创建(或扩充)requirements.txt 文件。
  • PyCharm 将寻找一个 requirements.txt 文件,让您知道您当前安装的包是否不符合该规范,帮助您解决这个问题,向您显示更新的包是否可用,并提供帮助你更新。
  • 大概其他现代 IDE 也做同样的事情,但是如果您在纯文本编辑器中进行开发,您仍然可以运行这样的脚本来检查已安装的包(这在 git post-checkout hook 中也很方便):
    echo -e "\nRequirements diff (requirements.txt vs current pips):"
    diff --ignore-case <(sed 's/ *#.*//;s/^ *--.*//;/^$/d' requirements.txt | sort --ignore-case) \
      <(pip freeze 2>/dev/null | sort --ignore-case) -yB --suppress-common-lines
    

希望这能使 requirements.txt 声明所需的包并且通常是包版本更清楚。与将其嵌入到 Dockerfile 中相比,它更加模块化和可重用,使其保持独立。

关于python - 为什么在 Docker 镜像中使用 requirements.txt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66512330/

相关文章:

python - 在基于 Python 文本的 GUI (TUI) 中输入

docker - 带有复制 Controller 的 Kubernetes 卷挂载

docker - Maven如何忽略通过openjdk中的MAVEN_OPTS设置的-Xmx :8-jdk-alpine?

php - 从Docker中的URL中删除WWW用于php-application

python - 需要帮助连接类中的 Connections

python - 将 Python 正则表达式转换为 VisualBasic

python - 如何通过数字指定gridspec位置?

linux - CoreOS - 通过 PID 获取 docker 容器名称?

ruby-on-rails - 如何调试在 docker 容器中运行的 rails 应用程序

node.js - 使用 docker-compose 处理 Node 模块