Python/Virtual environment

From ArchWiki
< Python
Revision as of 01:59, 4 June 2016 by Sudokode (talk | contribs) (A rough rewrite of the main virtualenv section (including pyvenv), virtualenvwrapper left alone for the most part)
Jump to navigation Jump to search


virtualenv is a tool used to create an isolated workspace for a Python application. It has various advantages such as the ability to install modules locally, export a working environment, and execute a Python program in that environment.


A virtual environment is a directory into which some binaries and shell scripts are installed. The binaries include python for executing scripts and pip for installing other modules within the environment. There are also shell scripts (one for bash, csh, and fish) to activate the environment. Essentially, a virtual environment mimics a full system install of Python and all of the desired modules without interfering with any system on which the application might run.


Python 3.3+ comes with a tool called pyvenv and an API called venv for extending the native implementation. For applications that require an older version of Python, virtualenv must be used.


Install one of these packages from the official repositories to use a Python virtual environment.


All three tools use a similar workflow.



This tool is provided by python (3.3+).

$ pyvenv venv


Use virtualenv for Python 3, available in python-virtualenv.

$ virtualenv venv

And virtualenv2 for Python 2, available in python2-virtualenv.

$ virtualenv2 venv


Use one of the provided shell scripts to activate and deactivate the environment. This examples assumes bash is used.

$ cd venv/
$ source bin/activate
(venv) $ which python
(venv) $ deactivate  # this is a shell function provided by bin/activate
$ which python

Normal Activities

Once inside the virtual environment, modules can be installed and scripts can be run as normal:

(venv) $ python -c 'import requests; print("this will not display because requests is not installed")'
(venv) $ pip install requests
(venv) $ python -c 'import requests; print("requests is now installed in the virtual environment")'

Python Versions

The binary versions depend on which virtual environment tool was used. For instance, the python command used for in the Python 2 example points to bin/python2.7, while the one in the pyvenv example points to bin/python3.5.

One major difference between pyvenv and virtualenv is that the former uses the system's Python binary by default:

$ ls -l pyvenv/bin/python3.5
lrwxrwxrwx 1 foo foo 7 Jun  3 19:57 pyvenv/bin/python3.5 -> /usr/bin/python3

The virtualenv tool uses a separate Python binary in the environment directory:

$ ls -l venv3/bin/python3.5
lrwxrwxrwx 1 foo foo 7 Jun  3 19:58 venv3/bin/python3.5 -> python3


virtualenvwrapper allows more natural command line interaction with your virtualenvs by exposing several useful commands to create, activate and remove virtualenvs. This package is a wrapper for both python-virtualenv and python2-virtualenv.


Install the python-virtualenvwrapper package from the official repositories.

Now add the following lines to your ~/.bashrc:

$ export WORKON_HOME=~/.virtualenvs
$ source /usr/bin/

If you are not using python3 by default (check the output of $ python --version) you also need to add the following line to your ~/.bashrc prior sourcing the script. The current version of the virtualenvwrapper-python package only works with python3. It can create python2 virtualenvs fine though.


Re-open your console and create the WORKON_HOME folder:

$ mkdir $WORKON_HOME

Basic Usage

The main information source on virtualenvwrapper usage (and extension capability) is Doug Hellmann's page.

  • Create the virtualenv:
$ mkvirtualenv -p /usr/bin/python2.7 my_env
  • Activate the virtualenv:
$ workon my_env
  • Install some package inside the virtualenv (say, Django):
(my_env) $ pip install django
  • Do your things
  • Leave the virtualenv:
(my_env) $ deactivate

See Also