Docker 和 Python virtualenv 有啥区别?

     2023-02-19     264

关键词:

【中文标题】Docker 和 Python virtualenv 有啥区别?【英文标题】:What's the difference between Docker and Python virtualenv?Docker 和 Python virtualenv 有什么区别? 【发布时间】:2018-12-01 03:58:24 【问题描述】:

根据我对 Docker 的了解,它是一种用于虚拟环境的工具。在他们的行话中,它被称为“容器化”。这或多或少是 Python 的 virtualenv 所做的。但是,您可以使用 virtualenv in Docker。那么,它是虚拟环境中的虚拟环境吗?我对这将如何工作感到困惑,所以有人可以澄清一下吗?

【问题讨论】:

这是一个很好的问题,但很可能会因为离题而被关闭。 virtualenv 不是真正的隔离,它是一个穷人使用路径黑客和符号链接的隔离——你仍然在你自己的操作系统中。 Docker 提供了更多的隔离,但不如一个完整的虚拟机。您可以将容器视为介于 virtualbox(重、昂贵)和 virtualenv(轻、便宜)之间的中间地带。在容器中创建 virtualenv 没有多大意义,因为隔离已经由 docker 提供,这样做没有多大意义。 what is the difference between vagrant, docker, virtualenv or just a virtual machine?的可能重复 【参考方案1】:

Python 虚拟环境将仅“容器化”Python 运行时,即 Python 解释器和 Python 库,而 Docker 隔离整个系统(整个文件系统、所有用户空间库、网络接口)。因此 Docker 比虚拟环境更接近虚拟机。

【讨论】:

考虑到容器只会服务于烧瓶网络应用程序,在 docker 容器内创建虚拟环境有什么好处。【参考方案2】:

virtualenv 仅封装 Python 依赖项。一个 Docker 容器封装了一个整个操作系统

使用 Python virtualenv,您可以轻松地在 Python 版本和依赖项之间切换,但您会被主机操作系统所困。

使用 Docker 映像,您可以更换整个操作系统 - 在 Ubuntu、Debian、Alpine 甚至 Windows Server Core 上安装和运行 Python。

Docker images 有你能想到的各种操作系统和 Python 版本的组合,可以在任何安装了 Docker 的系统上下载和使用。

【讨论】:

另外还有distroless images 表示来自 Google 的“仅包含编程语言运行时”的“几种流行的编程语言”(包括 Python)——来自 ArchWiki/Docker【参考方案3】:

除此之外:有一个组合 docker 和 venv 的案例:一些操作系统附带安装了 python 以提供“OS-near”应用程序,例如,据我所知,apt on debian(及其衍生产品)。 python venv 使开发人员能够发布需要不同解释器版本的 python 应用程序,而不会影响随操作系统提供的 python。现在,由于 Docker 如上所述“隔离了整个操作系统”,因此同样适用于 Docker 映像。因此,在我看来,如果需要/需要 Docker 映像,最好在 Docker 映像中为您的 python 应用程序创建一个 venv。

【讨论】:

这会减慢响应时间(两个虚拟化级别)吗? Python 虚拟环境改变了 Python 环境,它不虚拟化 Python 解释器的执行。除非使用管理程序(Docker Machine)执行,否则 Docker 容器不会被虚拟化。 我仍然认为在操作系统中挂载docker对我来说会很乏味,我通常这样做,我用shell语言编写pytohn外部项目的所有依赖项并自动执行它们,假设在生产中通过 ssh 需要不同的解释器版本 - 这是错误的。 venv 与创建它的操作系统解释器版本相同【参考方案4】:

“一个虚拟环境,一个自包含的目录树,其中包含特定版本 Python 的 Python 安装,以及一些额外的包”

一个docker容器提供了更高层次的抽象/隔离,它可以拥有自己的“进程空间、文件系统、网络空间、ipc空间等”

【讨论】:

如何使用 python 和 Java 运行 Docker?

】如何使用python和Java运行Docker?【英文标题】:HowtorunDockerwithpythonandJava?【发布时间】:2018-12-0920:06:10【问题描述】:我需要在我的docker容器中同时运行java和python来运行一些代码。这是我的dockerfile:如果我不添加FROMopenjdk:slim,... 查看详情

Docker:如何在 Centos 6.8 docker 文件中设置和使用 python 2.7

】Docker:如何在Centos6.8docker文件中设置和使用python2.7【英文标题】:Docker:Howtosetandusepython2.7inCentos6.8dockerfile【发布时间】:2018-07-3119:14:40【问题描述】:我在python2.7版本中制作了一个编程模型,并希望通过在Docker文件中使用它在... 查看详情

视图和url配置

...运行环境,记得每次开始工作之前要使用以下命令切换到virtualenv环境哦:)sourceenv/bin/activate注意以上命令中的env是自己命名的,来自这个命令virtualen 查看详情

使用 dbus 关闭 docker 容器和 python 中的树莓派

】使用dbus关闭docker容器和python中的树莓派【英文标题】:UsingdbustopoweroffRaspberryPiinsidedockercontainerandpython【发布时间】:2020-04-1311:49:28【问题描述】:我正在使用BalenaOS并使用一些python构建一个docker容器,该容器可以感知何时按下... 查看详情

在 docker 镜像中安装 Python3.9 和 pip(而不是 python 3.8)

】在docker镜像中安装Python3.9和pip(而不是python3.8)【英文标题】:InstallingPython3.9andpipindockerimage(andnotpython3.8)【发布时间】:2021-09-1201:57:15【问题描述】:我正在尝试构建一个docker映像来运行一些测试,但我无法说服ubuntu安装pytho... 查看详情

将 Pulsar 和 Python 组合成 docker-compose.yaml

】将Pulsar和Python组合成docker-compose.yaml【英文标题】:CombinePulsarandPythonintodocker-compose.yaml【发布时间】:2021-11-3015:55:16【问题描述】:背景:我已经在本地设置了一个standalonePulsar并使用Pulsar的pythonapidocs来执行一个简单的消费者和... 查看详情

使用 debugpy 和 vs 代码在 docker 容器中调试 python 导致超时/连接被拒绝

】使用debugpy和vs代码在docker容器中调试python导致超时/连接被拒绝【英文标题】:Debuggingpythonindockercontainerusingdebugpyandvscoderesultsintimeout/connectionrefused【发布时间】:2021-01-0818:53:08【问题描述】:我正在尝试使用debugpy为在docker中为V... 查看详情

如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ 工作者

】如何在Docker容器(Python、Flask和Redis)中启动自定义RQ工作者【英文标题】:HowtostartacustomRQworkerwithinaDockerContainer(Python,FlaskandRedis)【发布时间】:2019-07-2619:48:58【问题描述】:我遵循了MiguelGrinberg的优秀FlaskMega教程,并成功地在D... 查看详情

dockerselenium自动化-使用python操作docker,python运行启用停用和查询容器实例演示(代码片段)

Dockerselenium自动化-使用Python操作docker运行、启用、停用和查询容器实例演示第一章:Python操作docker①python运行docker容器实例②python启用、停用容器实例③python查询、展示容器实例列表第二章:Python调用dockerselenium执行自动... 查看详情

Pycharm 2017.1 EAP Python 控制台和远程 Docker 解释器不能一起工作

】Pycharm2017.1EAPPython控制台和远程Docker解释器不能一起工作【英文标题】:Pycharm2017.1EAPPythonConsoleandRemoteDockerInterpreternotworkingtogether【发布时间】:2017-07-1517:02:57【问题描述】:我使用minimum/docker-django-mysite映像创建了一个纯Python项... 查看详情

Docker交互模式和执行脚本

】Docker交互模式和执行脚本【英文标题】:Dockerinteractivemodeandexecutingscript【发布时间】:2014-09-2522:02:27【问题描述】:我的docker容器中有一个Python脚本需要执行,但我还需要在容器创建后对它进行交互式访问(使用/bin/bash)。我... 查看详情

如何在 docker 映像中安装 python 模块?

】如何在docker映像中安装python模块?【英文标题】:HowcanIinstallpythonmodulesinadockerimage?【发布时间】:2017-11-0411:33:40【问题描述】:我有一个名为:Image的图像和一个名为:container的正在运行的容器。我想安装pytorch和anacoda。最简... 查看详情

如何使用 docker 运行 python cron 应用程序? [复制]

】如何使用docker运行pythoncron应用程序?[复制]【英文标题】:Howtorunapythoncronapplicationwithdocker?[duplicate]【发布时间】:2019-11-0522:24:16【问题描述】:我正在尝试在docker中使用cron运行我的两个python文件。我有两个文件a.py和b.py,它... 查看详情

处理使用 docker 向 google big query 读取和写入数据的 python 脚本的自动身份验证

】处理使用docker向googlebigquery读取和写入数据的python脚本的自动身份验证【英文标题】:HandlingautomaticauthenticationofapythonScriptthatreadandwritedatatogooglebigqueryusingdocker【发布时间】:2018-03-2509:58:34【问题描述】:我最近在我的本地机器... 查看详情

使用 python 3 和 numpy、scipy、pillow 和 matplotlib 在 Raspberry Pi 3B+ 上构建 docker 映像失败

...用python3和numpy、scipy、pillow和matplotlib在RaspberryPi3B+上构建docker映像失败【英文标题】:BuildingdockerimageonRaspberryPi3B+withpython3andnumpy,scipy,pillowandmatplotlibfails【发布时间】:2022-01-2106:34:05【问题描述】:我有一个运行RaspbianBuster的Raspber 查看详情

将 Python 诗歌与 Docker 集成

】将Python诗歌与Docker集成【英文标题】:IntegratingPythonPoetrywithDocker【发布时间】:2019-05-1823:58:38【问题描述】:你能给我一个Dockerfile的例子吗,我可以在其中将我需要的所有软件包从poetry.lock和pyproject.toml安装到我的Docker镜像/容... 查看详情

用于 Python 变量的 Docker ENV

】用于Python变量的DockerENV【英文标题】:DockerENVforPythonvariables【发布时间】:2018-09-2102:21:43【问题描述】:作为python和docker的新手,我创建了一个小烧瓶应用程序(test.py),它有两个硬编码值:username="test"password="12345"我能够创建Do... 查看详情

将 Docker 与 Python 诗歌一起使用?

】将Docker与Python诗歌一起使用?【英文标题】:UsingDockerwithPythonPoetry?【发布时间】:2022-01-1116:42:35【问题描述】:我一直在使用Docker和pipenv进行数据科学部署设置,现在我想改用Poetry。我的Dockerfile是:FROMpython:3.8-alpine3.13ENVPOETRY... 查看详情