Python Virtual Environment Explained
Have you ever messed with Python packages? Have you ever had problems running someone else script because of broken dependencies? Would you like to know why and how to fix it? In this article, we explain how does Python virtual environment work.
We will start by introducing the main characters in our story.
Starring
House - the operating system
In our story, the House will be an operating system. It has three floors. Each floor represents some path in the folder directory. The lowest floor is a default path. When someone enters the House, always checks this path.
Power Station - Python interpreter
The Power Station will give energy to our Robots. The Power Station represents here the Python interpreter. Would you please notice that our Power Station has version 3.8? It corresponds to the Python version (3.8). What is more, our Power Station has a lamp. If the lamp has a light, then it means that the Power Station is on.
Robots - Python packages and scripts
There will be a lot of Robots in our tale. The Robot is a Python program. It can be a package or a script.
Robots will do hard work. They don't complain. There are two types of Robots in our story: scripts and packages. Below is the example of a Robot with a script. It has the name script.py
. It has some code blocks in the body. Please notice that our Robot has two hands. The number of hands is unlimited. It can be 0 or 10 (any number) - it depends on the Robot. Each hand can hold the other hand, but only if it fits. Our script Robot needs other Robots to work. They will hold his hands.
The particular case of the hand is the hand that fits a human hand. In that case, we can say that Robot has a friendly interface for humans (for example, it can be a command-line interface or graphical interface). Do you see how happy the human with a Robot friend is?
The second type of Robots is a package. Below we have a Robot representing package B
. It has a version 2.1.3
and a hand. Would you please notice that hands can be in different shapes?
Please remember that only Robots with the fitting hands can be connected. The next thing, the Robot script needs to have all hands connected to be able to work.
Power Station installation on the first floor
Let's start. We have an empty House. We bring a Power Station to our House (we install Python). We will install it on the first floor because it is our default floor. The lamp is on, which means that Power Station is active.
What's happening? Nothing. We need Robots to see action.
Add Robot script
OK, we start by creating a script Robot with the name script.py
. It will enter the House and go to the first floor.
Our first script is straightforward (it doesn't have any dependencies). For example:
print("Hello world!")
Does it do a lot of work for us? No. It will just print Hello world! on the screen.
To have more done with the Robot, we need to add more code to our script. We will not write everything from scratch. We will reuse existing packages. We will use packages A (version 1.0.0
) and B (versio 2.1.3
). We need to install the required packages - we need to bring them to our default floor.
OK, now our script is doing a lot of work and using two external packages. We are happy.
A turning point - next Robot script
But one day, we need to create one more Robot script (with name onemore.py
). This time, we will need to use a newer version of package A - version 1.5.7
(with new features). Unfortunately, starting from version 1.5.0
, all Robots A has a different hands shape. Before the 1.5.0
version, all Robots A have diamond hands. But, starting from 1.5.0
, all Robots A have circle shape hands.
What does it mean for us? We can't just replace the Robot A 1.0.0
on the first floor because it will break the Robot with script.py
. The Robot with script.py
has diamond shape hand, it won't fit circle hand from version 1.5.7
.
Do we need to choose between Robots script.py
and onemore.py
? Can we use only one? No, we will use virtual environments to keep both versions.
Install Power Station on the second floor
We have many empty floors in our House. Let's install one more Power Station on the second floor. It will be our Python virtual environment.
Do you notice that the lamp is off? After installation, we need to activate the Power Station on the second floor. It will deactivate the Power Station on the first floor.
Now we can bring (install) Robot with the required packages. We will install package A in version 1.5.7
and create a Robot script onemore.py
.
The Power Station on the second floor represents a Python virtual environment. It can be switched on when needed. It has different packages with different versions than the first floor (default Python installation).
Install Power Station on the third floor
Let's create one more Robot script with different packages versions. We will have Robot script last.py
with required packages: A in version 2.1.0
and B in version 4.1.0
. In the image below, we show how packages change with versions.
No problem, just bring one more Power Station (create one more Python virtual environment). We will install the Power Station on the third floor. We can safely place packages A and B in a different version without worrying if we break something on the other floors. Remember to switch on the lamp after Power Station installation (activate the environment).
Leaving the House and more Robot scripts
What will happen if we leave the House and come back after some time (switch off and on the computer)? All Power Stations on higher floors will be off (virtual environments will not be active). Only Power Station on the first floor (in the default path) will be on. If we want to use the Robot script, it will try to use packages from the first floor. So, if we need other sets of packages or versions, we need to activate the Power Station on the proper floor (switch to the virtual environment).
Summary
When using Python packages, a programmer needs to be very careful about the versions. Python virtual environments are an excellent solution to avoid conflicts. We hope that analogy to House, Power Station with a lamp and Robots will help you visualize and understand how to leverage Python virtual environments.
We are looking for feedback or comments from you. You can reach us by email to Ola.
We are working on the MLJAR Studio desktop application. It is a new notebook for creating Python scripts with no-code addons. The application is still under development. If you would like to be informed about the release please fill the form.