About
Python Virtual Environments allow Python packages to be installed in an isolated location for a particular project, rather than being installed globally.
By default (without virtual environment), all package are installed by default in the same default global site-packages directory (for instance /usr/lib/python2.7/site-packages). Therefore this is not possible to have system wide two package with two different versions. virtual environment resolves this problem.
Structure
A virtual env will install:
Structure:
- ENV/lib/ - virtual env library
- ENV/include/ - virtual env library
- ENV/lib/pythonX.X/site-packages/. - Linux - installed package
- ENV/lib/site-packages/. - Windows - installed package
- ENV/bin - executables on Linux
- ENV/Scripts - executables on Windows
Executables are noticeably a new python, setuptools, pip,…
The python in your new virtualenv is effectively isolated from the python that was used to create it.
Example PySpark, the package are installed in
- venv\lib\site-packages\pyspark\
Management
Create
There are two tools for creating Python virtual environments:
- venv is available by default in Python 3.3
- virtualenv needs to be installed separately, but supports Python 2.7+ and Python 3.3+
venv
venv is available by default in Python 3.3
Example and usage:
- venv
python3 -m venv ENV
source ENV/bin/activate
virtualenv
virtualenv needs to be installed separately, but supports Python 2.7+ and Python 3.3+
Steps:
- Python - Regular Package of virtualenv first
pip install virtualenv
- Creation with virtualenv
# Usage:
# virtualenv [--system-site-packages] ENV
# where:
# * ''ENV'' is a directory to place the new virtual environment.
# * ''%%--system-site-packages%%'' to inherit packages from the [[..:grammar:regular#global|global site package dir]]
cd c:\tmp\
mkdir myVenv
virtualenv myVenv
Using base prefix 'c:\\python37-32'
New python executable in c:\tmp\myVenv\Scripts\python.exe
Installing setuptools, pip, wheel...
done.
Remove
- deactivate
(ENV)$ deactivate
- Remove
rm -r /path/to/ENV
Run a script
Directly
Running a script with #! /path/to/ENV/bin/python would run that script under this virtualenv’s python.
If you directly run a script or the python interpreter from the virtualenv’s bin/ directory (e.g. path/to/ENV/bin/pip or /path/to/ENV/bin/python-script.py) then sys.path will automatically be set to use the Python libraries associated with the virtualenv. But, unlike the activation scripts, the environment variables PATH and VIRTUAL_ENV will not be modified.
Activate
Before running a script, you may activate it. Activating the virtual environment means running an activate script.
The script will:
- change your PATH so its first entry is the virtualenv’s bin/ directory
- set the VIRTUAL_ENV variable
- modify your shell prompt to indicate which environment is currently active. To disable this behaviour, see VIRTUAL_ENV_DISABLE_PROMPT
Example:
- Bash
source /path/to/ENV/bin/activate
deactivate
- Dos
\path\to\env\Scripts\activate.bat
\path\to\env\Scripts\deactivate
- Powershell
Set-ExecutionPolicy AllSigned
\path\to\env\Scripts\activate.ps1