如何使用python虚拟环境复制到docker包含

2024-05-23 18:52:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python包,我已经安装并修改了我的需要存储在一个venv文件夹中。我想用:

RUN source venv/bin/activate

在我的Dockerfile(当然,将它复制到容器中)可以解决我的问题,但是对this answer的评论显示它没有。然后,我遇到了this article显示如何在docker容器中设置新的VEV,但不回答我的问题。许多其他的答案都让我在一场永不停息的疯狂追逐中发问,所以我决定在这里问。希望一个好的答案能够解决我的问题,并为将来在docker容器中定制python包中面临这个问题的人服务。

我的问题:
如何使用复制到docker容器中的VEV?


Tags: dockerrun答案answerdockerfile文件夹sourcebin
1条回答
网友
1楼 · 发布于 2024-05-23 18:52:28

一般来说,你不能在任何地方复制虚拟环境,Docker或其他地方。它们往往绑定到一个非常特定的文件系统路径和一个非常特定的Python安装。如果您知道您有相同的Python二进制文件,并将其复制到相同的文件系统路径,那么您可以按原样复制它,但是构建系统将非常脆弱。在

在Docker中通常不需要虚拟环境。Docker映像提供了与在非Docker上下文中使用虚拟环境相同的独立Python安装。如果您通常通过运行

python3 -m venv vpy
. vpy/bin/activate
pip install -r requirements.txt

然后你可以得到一个与Dockerfile类似的安装

^{pr2}$

提示您正在修改安装包。这通常不是最佳实践(如果您更改的包中有关键的安全更新怎么办?如果你的同事需要在你的项目上工作,而不是在你的电脑上工作呢。您可以使用类似于diff(1)的工具制作一个补丁文件,描述所更改的内容,并将修改后的文件与原始文件进行比较。如果你有,那么你可以做一些类似的事情

^{3}$

需要注意的是,每个RUN命令都会在新容器中启动一个新shell。所以最后一个例子中的cd命令只影响这个RUN命令,而不会影响后面的任何操作。在您建议的RUN source ...命令中,此命令设置的环境变量将在运行命令结束时丢失。(还要注意,source不是一个标准的shell命令,不能在基于Alpine的图像上工作,但是.是等效的,是标准的。)

相关问题 更多 >