在Dockerfi中激活python virtualenv

2024-04-18 14:18:08 发布

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

我有一个Dockerfile,在那里我试图激活python virtualenv什么之后,它应该在这个env中安装所有依赖项。然而,所有的东西仍然在全球范围内安装。我用了不同的方法,但都没有奏效。我也没有任何错误。哪里有问题?

一。 ENV PATH $PATH:env/bin

2。 ENV PATH $PATH:env/bin/activate

三。 RUN . env/bin/activate

我还关注了an example of a Dockerfile config for the python-runtime image on Google Cloud,这与上面的内容基本相同。

Setting these environment variables are the same as running source /env/bin/activate.

ENV VIRTUAL_ENV /env

ENV PATH /env/bin:$PATH

另外,ENV VIRTUAL_ENV /env是什么意思以及如何使用它?


Tags: thepath方法rundockerfileenvanbin
3条回答

在容器中使用virtualenv有完全合理的理由。

您不必激活virtualenv来安装或使用软件。尝试直接从virtualenv的bin目录调用可执行文件:

FROM python:2.7

RUN virtualenv /ve
RUN /ve/bin/pip install somepackage

CMD ["/ve/bin/python", "yourcode.py"]

虽然我同意马库斯的观点,这不是对多克的方式,但你可以做你想做的。

直接使用Docker的RUN命令不会给你答案,因为它不会从虚拟环境中执行你的指令。相反,使用/bin/bash压缩在一行中执行的指令。以下文件对我有效:

FROM python:2.7

RUN virtualenv virtual
RUN /bin/bash -c "source /virtual/bin/activate && pip install pyserial && deactivate"
...

这应该只在虚拟环境中安装pyserial模块。

您不需要在Docker容器中使用virtualenv。

virtualenv用于依赖关系隔离。您希望防止安装的任何依赖项或包在应用程序之间泄漏。Docker实现了同样的功能,它隔离了容器内的依赖关系,防止了容器之间和应用程序之间的泄漏。

因此,在Docker容器中使用virtualenv是没有意义的,除非你在同一个容器中运行多个应用程序,如果是这样的话,我会说你做错了什么,解决方案是以更好的方式设计你的应用程序,并将它们拆分到多个容器中。

相关问题 更多 >