Virtual environments
====================
.. contents::
Using Python virtual environments
---------------------------------
To create a virtual environment that uses a particular Python executable,
assuming that Python executable is /usr/bin/python, run::
/usr/bin/python -m venv /path/for/new/venv
To start using it, run::
. /path/for/new/venv/bin/activate
Virtualenv and virtualenvwrapper
--------------------------------
Virtualenvwrapper adds some helpful shell aliases, but some of them do assume
all your venvs are under one directory, which is ``~/.virtualenvs`` by default.
Still, a few of the aliases work anytime a venv has been activated.
* `virtualenv `_
* `virtualenvwrapper `_ is installed
Virtualenvwrapper needs virtualenv installed. It's probably simplest to install
both of them using your system packages, e.g. for ubuntu::
sudo apt-get install python3-virtualenv virtualenvwrapper
That puts the files on your system, but there's one more step to make it work - you
need to activate it in your ~/.bashrc::
. /usr/share/virtualenvwrapper/virtualenvwrapper.sh
If when you open a new shell, you get an error like::
/home/dpoirier/.pythonz/pythons/CPython-3.9.0/bin/python: Error while finding module specification for 'virtualenvwrapper.hook_loader'
(ModuleNotFoundError: No module named 'virtualenvwrapper')
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/home/dpoirier/.pythonz/pythons/CPython-3.9.0/bin/python and that PATH is
set properly.
then before loading virtualenvwrapper.sh, set an env var VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
. /usr/share/virtualenvwrapper/virtualenvwrapper.sh
Aliases that only work for venvs under ~/.virtualenvs
.....................................................
Now if you want to create and activates a new env
under ``~/.virtualenvs``::
mkvirtualenv envname
switch to ``~/.virtualenvs/envname2``::
workon envname2
List all of the environments::
lsvirtualenv
Show the details for a single virtualenv::
showvirtualenv
delete a virtual env (must deactivate first)::
rmvirtualenv
Aliases that work anytime a venv is active
..........................................
no longer work with a virtual env::
deactivate
uninstall all the packages from the current venv::
wipeenv