Creating a virtual environment in Python

Like in many other languages, Python gives us the possibility to create an environment specific for each project we work on.

Why is this desirable?

If we run many different Python projects inside the same environment, there will be instances where dependencies for different projects will clash with each other and create many other problems.

By keeping each project isolated and create a virtual environment for each one of them, we avoid this problem.

A virtual environment also helps if in the future we need to transfer one particular project to another machine.
By specifying the exact library versions the project runs on, we can recreate the project on any machine exactly as it was specified originally.

Python 3 has a module called venv that can be used to create a virtual environment.

We first create a project directory that will contain all our files and libraries. Inside the project directory we can then use Python 3 to create the virtual environment by running this command:

python3 -m venv .venv

The -m flag calls the venv module as a script.

We then pass a directory name to the venv script, where the environment will be saved.

We name this directory .venv in this case, but it could be called anything.

We prefer to prefix the directory name with a dot, so it won't be shown when we list the files in the project directory.

When we issue the command, the .venv directory will be created and it will include a configuration file called pyven.cfg pointing to the Python version that has created the environment.

The command also creates a bin subdirectory with a symlink to the Python binaries used when we call the python command.

To activate the virtual environment, we need to issue this command:

$ source .venv/bin/activate

We can verify the virtual environment is activated by looking at the modified prompt in our terminal window:

(.venv) $

If we now check which version of Python is active, we see that it's the version specified in the virtual environment:

which python

If we install or upgrade packages in the virtual environment, they will be installed only inside the virtual environment, and won't affect the default system Python, or any other projects.

To deactivate the virtual environment, we issue the deactivate command at the prompt, and we'll be taken to the regular system shell prompt.

(.venv) $ deactivate

If we need to remove the whole virtual environment from a project, we can just delete the .venv directory.

To show all the various options available to the venv command, we can call venv with the -h flag.

python3 -m venv -h

Now that we know how to create a brand new virtual environment we can use it to build awesome Python applications.

Loading more posts…