The Python Oracle

What's the difference between Docker and Python virtualenv?

--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Hypnotic Orient Looping

--

Chapters
00:00 What'S The Difference Between Docker And Python Virtualenv?
00:30 Answer 1 Score 43
00:52 Accepted Answer Score 238
01:27 Answer 3 Score 19
02:02 Answer 4 Score 2
02:26 Thank you

--

Full question
https://stackoverflow.com/questions/5097...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #docker #virtualenv

#avk47



ACCEPTED ANSWER

Score 238


A virtualenv only encapsulates Python dependencies. A Docker container encapsulates an entire OS.

With a Python virtualenv, you can easily switch between Python versions and dependencies, but you're stuck with your host OS.

With a Docker image, you can swap out the entire OS - install and run Python on Ubuntu, Debian, Alpine, even Windows Server Core.

There are Docker images out there with every combination of OS and Python versions you can think of, ready to pull down and use on any system with Docker installed.




ANSWER 2

Score 43


Python virtual environment will "containerize" only Python runtime i.e. python interpreter and python libraries whereas Docker isolates the whole system (the whole file-system, all user-space libraries, network interfaces) . Therefore Docker is much closer to a Virtual Machine than virtual environment.




ANSWER 3

Score 19


Adding to the above: there is a case for combining docker and venv: some OSs ship with python installed to provide 'OS-near' apps, e.g., to my knowledge, apt on debian (and its derivatives). The python venv enables a developer to ship a python app which requires a different interpreter version without affecting the shipped-with-the-OS python. Now, since Docker 'isolates the whole OS' as stated above, the same applies to a Docker image. Hence, in my view, if a Docker image is required/desired, it is best practice to create a venv inside the Docker image for your python app.




ANSWER 4

Score 2


"a virtual environment, a self-contained directory tree that contains a Python installation for a particular version of Python, plus a number of additional packages"

A docker container provides a higher level of abstraction/isolation, it can has its own "process space, file system, network space, ipc space, etc."