# Python/Virtual environment

From ArchWiki
< Python
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.

## Overview

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.

In 2017, Pipenv was published which manages all the above tools - managing virtual environments of python interpreters, package dependencies, their activation and reproducible locking of versions in Pipfiles.

## Installation

Python 3.3+ comes with a module called venv. For applications that require an older version of Python, virtualenv must be used.

### Packages

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

- Python 3.3+: python
- Python 3: python-virtualenv
- Python 2: python2-virtualenv

For Pipenv:

- Python 3: python-pipenv

## Usage

All three tools use a similar workflow.

### Creation

Use venv or virtualenv to create the virtual environment within your project directory. Be sure to exclude the venv directory from version control--a copy of `pip freeze` will be enough to rebuild it.

#### venv

Note: This method replaces the pyvenv script, which is removed in python 3.8.

This tool is provided by python (3.3+):

    $ python -m venv envname

#### virtualenv

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

    $ virtualenv envname

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

    $ virtualenv2 envname

### Activation

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

    $ source envname/bin/activate
    (envname) $

Once inside the virtual environment, modules can be installed with pip and scripts can be run as normal.

To exit the virtual environment, run the function provided by `bin/activate`:

    (envname) $ deactivate

## Python versions

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

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

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

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

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

## virtualenvwrapper

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

### Installation

Install the python-virtualenvwrapper package from the official repositories.

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

    export WORKON_HOME=~/.virtualenvs
    source /usr/bin/virtualenvwrapper.sh

The line `source /usr/bin/virtualenvwrapper.sh` can cause some slowdown when starting a new shell. To fix this try using `source /usr/bin/virtualenvwrapper_lazy.sh`, which will load virtualenvwrapper the first time a virtualenvwrapper function is called.

Re-open your console and create the `WORKON_HOME` folder:

    $ mkdir $WORKON_HOME

Note: This seems to happen now automatically after re-open the console for the first time.

### Basic usage

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

Create the virtual environment:

    $ mkvirtualenv -p /usr/bin/python2.7 my_env

Activate the virtual environment:

    $ workon my_env

Install some package inside the virtual environment (say, Django):

    (my_env) $ pip install django

After you have done your things, leave the virtual environment:

    (my_env) $ deactivate

## Pipenv

pipenv allows better managed CLI interactions by providing a single program that does all the functions of the above tools.

### Installation

Install the python-pipenv package from the official repositories.

### Basic usage

All commands can be executed in the project folder, and pipenv will recognize the specific situation - whether a virtualenv exists in the directory, locating it, and running on the specific virtual interpreter when pipenv is executed.

More information at [1], [2], [3].

## See also

- Python venv
- virtualenv PyPI page
- virtualenvwrapper page at Doug Hellmann's

Category:

- Programming languages