我有一个用FastAPI或Django这样的框架构建的Web应用程序,我的项目使用Poetry来管理依赖项。
我没有找到任何类似的主题。
**问题是:**我应该在我的生产docker文件中安装诗歌并使用诗歌安装依赖项,还是应该导出requirements.txt
并只在我的docker映像中使用pip?
实际上,在部署应用程序之前,我将requirements.txt
导出到项目的根目录,并在Docker映像中使用它。
我的动机是,我不需要在docker文件中使用诗歌的“复杂性”,因为requirements.txt
已经由诗歌生成,在映像中使用它将生成一个新的步骤,从而影响构建速度。
但是,我已经看到了很多dockerfiles与诗歌安装,是什么让我认为我做了一个坏的使用工具。
1条答案
按热度按时间ca1c2owp1#
生产中不需要用诗。要理解这一点,我们应该回顾一下诗存在的最初原因。基本上有两个主要原因:-
1.为我们管理python venv-过去人们使用不同的工具,从自己开发的脚本到类似virtualenvwrapper的东西来自动管理虚拟环境。
1.帮助我们将软件包发布到PyPI
第二个原因不是这个问题真正关心的问题,所以让我们看看第一个原因。为什么我们需要在开发中像诗这样的东西?这是因为开发环境可能在不同的开发人员之间是不同的。我的venv可能是在
/home/kamal/.venv
,而约翰可能想把他的virtualenv放在/home/john/.local/venv
。在写如何设置和运行你的项目的注解时,你会如何写注解来迎合我和John之间的差异呢?我们可能会使用一些占位符,如
/path/to/your/venv
。使用诗歌,我们不必担心这个问题。只需在注解中写上你应该运行的命令如下:-诗歌照顾所有的差异。但在生产中,我们没有这个问题。我们的应用在生产中将在单一的地方,比方说在
/app
。当写笔记如何运行命令在生产中,我们可以只写:-下面是一个示例Dockerfile,我们使用Docker部署我们的应用:-
我们使用多级构建,在构建阶段,我们仍然使用poetry安装所有依赖项,但在最后阶段,我们只复制
/app
,其中还将包括.venv
virtualenv文件夹。