13.2. Module venv¶
Isolated Python environment
Allows to have multiple versions of Python for one project
For testing on different versions:
python3.9
,python3.10
,python3.11
Test libraries and frameworks before upgrading (create venv, install requirements, run tests, delete if fails)
Allows to have different versions of libraries and frameworks for each project
Difference between
venv
andvirtualenv
venv
is bundled with Python since 3.3 (no installation required)virtualenv
is independent package installed viapip
virtualenvwrapper
is additionally installed command line tools
13.2.1. Venv vs Virtualenv¶
Both venv
and virtualenv
are used to create isolated
Python environments. Since Python 3.3, a subset of virtualenv
has been integrated into the standard library under the venv
module.
Module venv
:
Python: version 3 only
Install: not required - bundled with Python since Python 3.3
Usage:
python3.11 -m venv DIRECTORY
Development: slower and synchronized with Python releases
Features: all you need
Author: Bernat Gabor
Module virtualenv
:
Python: version 2 and 3
Install:
pip install virtualenv
Usage:
virtualenv DIRECTORY
Development: faster and independent from Python releases
Features: all from
venv
plus extra (which typically you don't need)Author: Bernat Gabor
In my opinion builtin venv
is all you need. Moreover no installation
is required to use it.
13.2.2. Create¶
.venv-py311
is the name of venv folderSee "Directory Naming Convention" below
# Go to project directory
$ cd PROJECT
# Create virtual environment in directory named ``.venv-py311``
$ python3.11 -m venv .venv-py311
13.2.3. Run Ad-Hoc¶
Will run python with from virtual environment
With all the modules already installed
# Go to project directory
$ cd PROJECT
# Run ``myscript.py`` using virtual environment
$ venv-py311/bin/python3 myscript.py
13.2.4. Activate¶
bin
for macOS, Linux, BSDScripts
for WindowsNote the direction of slash and backslash (OS dependent)
macOS, Linux, BSD:
# Go to project directory
$ cd PROJECT
# Activate virtual environment
$ source venv-py311/bin/activate
Windows:
# Go to project directory
$ cd PROJECT
# Activate virtual environment
$ venv-py311\Scripts\activate.bat
13.2.5. Install Modules¶
Ad-hoc:
# Go to project directory
$ cd PROJECT
# Install new module
$ venv-py311/bin/python3 -m pip install MODULE
# Install modules listed in `requirements.txt`
$ venv-py311/bin/python3 -m pip install -r requirements.txt
# Upgrade modules listed in `requirements.txt`
$ venv-py311/bin/python3 -m pip install --upgrade -r requirements.txt
# Check installed modules
$ venv-py311/bin/python3 -m pip freeze
Activated:
# Go to project directory
$ cd PROJECT
# Activate virtual environment
$ source venv-py311/bin/activate
# Install new module
$ python3 -m pip install PACKAGE
# Install modules listed in `requirements.txt`
$ python3 -m pip install -r requirements.txt
# Upgrade modules listed in `requirements.txt`
$ python3 -m pip install --upgrade -r requirements.txt
# Check installed modules
$ python3 -m pip freeze
13.2.6. Directory Naming Convention¶
No standard naming convention
Naming directory like module (
venv
) name is a good ideaAdding Python version is also a good practice
Optionally naming per main framework/library version
Dot at the beginning hides directory on Linux and macOS (but doesn't work on Windows)
Underscore is Python convention for private/protected, but does not work for OS and Git
venv
venv-py
venv-py310
venv-py311
venv-py312a1
venv-py312b1
venv-py312rc1
venv-py311-dj40
venv-py311-dj41
venv-py311-dj42
venv-py311-dj50a1
venv-py311-dj50b1
venv-py311-dj50rc1
venv-py311-np123-pd15
13.2.7. Good Practices¶
python3.11 -m venv -h
python3.11 -m venv --upgrade-deps venv-py311
Name venv directory similar to python version
venv-py3.11
Place in your project directory
Add venv directory to
.gitignore
(important!)Change prompt by appending at the end of
venv-3.11/bin/activate
:
13.2.8. Bash Prompt¶
Default on most Linux distributions
\e[
– This string tells bash prompt to apply color from next character.0;32m
– This string represents the colors. The number before the; represent typeface. And the number after the ; represent color code.\e[0m
– This string will tell the bash prompt to apply the color to the previous character.
Typeface:
0 – Normal
1 – Bold
2 – Dim
4 – Underlined
Color codes:
30 – Black
31 – Red
32 – Green
33 – Brown
34 – Blue
35 – Purple
36 – Cyan
37 – Light gray
red='\e[0;31m'
green='\e[0;32m'
brown='\e[0;33m'
blue='\e[0;34m'
purple='\e[0;35m'
cyan='\e[0;36m'
gray='\e[0;37m'
white='\e[0;39m'
project_name='My Project'
export PS1="\n${cyan}${project_name}> ${white}"
13.2.9. Zsh Prompt¶
Default on macOS
Colors: black, red, green, yellow, blue, magenta, cyan, white
export PROMPT='\n%F{blue}project_name> %F{white}'
13.2.10. Further Reading¶
13.2.11. Assignments¶
13.2.11.1. Virtualenv¶
Assignment: Virtualenv
Complexity: easy
Lines of code: 0 lines
Time: 2 min
- English:
Create
venv
Add
venv
as a Python interpreter in your IDERun doctests - all must succeed
- Polish:
Stwórz
venv
Dodaj
venv
jako interpreter Python w Twoim IDEUruchom doctesty - wszystkie muszą się powieść