gpt4 book ai didi

python - 关于如何在 docker 中管理 python 模块的建议?

转载 作者:行者123 更新时间:2023-12-01 01:21:15 25 4
gpt4 key购买 nike

我正在寻求有关如何在 docker 上下文中管理 python 模块的建议。

我所知道的当前选项包括:

  1. 在构建过程中通过 pip 单独安装它们
  2. 在构建过程中通过 requirments.txt 通过 pip 将它们安装在一起
  3. 将它们安装到卷并将该卷添加到 PYTHONPATH

理想情况下,我想要一个完全可重复生产的解决方案,并且如果我决定添加另一个模块或更新其中一个模块的版本,则不需要重新安装每个模块。

从我的角度来看:
(2) 是一个问题,因为 docker ADD 命令(用于访问 requirements.txt 文件)显然会使缓存失效,并且意味着对文件的任何更改都意味着一切每次构建镜像时都必须重新构建/重新安装。
(1) 保持缓存完好无损,但这意味着您需要指定每个包的确切版本(以及可能的依赖项?),这看起来可能非常乏味且容易出错。
(3) 目前是我个人最喜欢的,因为它允许包在镜像/构建之间保留并允许使用 requirements.txt。唯一的缺点是,本质上您将包存储在本地计算机上,而不是图像上,这导致容器依赖于主机操作系统,这有点违背了容器的意义。

所以我不完全确定这里有哪些最佳实践,希望得到建议。

作为引用,还有关于此主题的其他问题,但我认为其中没有一个问题能正确解决我的上述问题:
docker with modified python modules?
Docker compose installing requirements.txt
How can I install python modules in a docker image?

编辑:
只是一些额外的注释来提供更多背景信息。我的项目通常侧重于数据分析(而不是软件开发或 Web 开发)。我倾向于使用多个图像(1 个用于 python,1 个用于 R,1 个用于数据库),并使用 docker compose 将它们一起管理。到目前为止,我一直在主机操作系统上使用 makefile 从头开始​​重新构建项目,例如

some_output.pdf:  some_input.py
docker-compose run python_container python some_input.py

输出被写入主机操作系统上的卷

最佳答案

requirements.txt 文件是最佳选择。 (即使更改它也会完全重新安装。)

新的开发人员开始处理您的项目。他们检查您的源代码控制存储库,然后说:“哦,这是一个 Python 项目!”,创建一个虚拟环境,然后运行 ​​pip install -rrequirements.txt,然后就可以开始了。一周后,他们过来问“那么我们如何部署这个?”,但既然你已经将正常的 Python 设置封装在 Docker 中,他们就不必特意使用奇怪的 Docker 特定开发流程.

灾难!您的主服务器的硬盘崩溃了!您拥有所有数据的备份,但应用程序代码只是从源代码控制中重建。如果您将代码保存在 Docker 卷(或绑定(bind)安装的主机目录)中,您需要弄清楚如何重建它;但前两个选项已记录在 Dockerfile 中。这对于上一段中的新开发人员(他们希望在部署之前在本地测试其镜像)以及任何类型的基于集群的部署系统(Swarm、Kubernetes)也很重要,在这些系统中您只想部署镜像而不是还必须在部署系统框架之外手动部署代码。

关于python - 关于如何在 docker 中管理 python 模块的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53812532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com