arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
187 lines (112 loc) • 6.57 kB
Markdown
*virtualenv* is a tool used to create an isolated workspace for a [Python](/index.php/Python "Python") application. It has various advantages such as the ability to install modules locally, export a working environment, and execute a [Python](/index.php/Python "Python") program in that environment.
## Contents
* [1 Overview](#Overview)
* [2 Installation](#Installation)
* [2.1 Packages](#Packages)
* [3 Usage](#Usage)
* [3.1 Creation](#Creation)
* [3.1.1 venv](#venv)
* [3.1.2 virtualenv](#virtualenv)
* [3.2 Activation](#Activation)
* [4 Python versions](#Python_versions)
* [5 virtualenvwrapper](#virtualenvwrapper)
* [5.1 Installation](#Installation_2)
* [5.2 Basic usage](#Basic_usage)
* [6 See also](#See_also)
## 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](/index.php/Bash "Bash"), csh, and [fish](/index.php/Fish "Fish")) to activate the environment. Essentially, a virtual environment mimics a full system install of [Python](/index.php/Python "Python") and all of the desired modules without interfering with any system on which the application might run.
## Installation
[Python](/index.php/Python "Python") 3.3+ comes with a module called *venv*. For applications that require an older version of Python, *virtualenv* must be used.
### Packages
[Install](/index.php/Install "Install") one of these packages from the [official repositories](/index.php/Official_repositories "Official repositories") to use a Python virtual environment.
* Python 3.3+: [python](https://www.archlinux.org/packages/?name=python)
* Python 3: [python-virtualenv](https://www.archlinux.org/packages/?name=python-virtualenv)
* Python 2: [python2-virtualenv](https://www.archlinux.org/packages/?name=python2-virtualenv)
## 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 deprecated since [python](https://www.archlinux.org/packages/?name=python) 3.6.
This tool is provided by [python](https://www.archlinux.org/packages/?name=python) (3.3+):
```
$ python -m venv venv
```
#### virtualenv
Use *virtualenv* for Python 3, available in [python-virtualenv](https://www.archlinux.org/packages/?name=python-virtualenv).
```
$ virtualenv venv
```
And *virtualenv2* for Python 2, available in [python2-virtualenv](https://www.archlinux.org/packages/?name=python2-virtualenv).
```
$ virtualenv2 venv
```
### Activation
Use one of the provided shell scripts to activate and deactivate the environment. This example assumes bash is used.
```
$ source venv/bin/activate
(venv) $
```
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`:
```
(venv) $ 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.6`.
One major difference between *venv* and *virtualenv* is that the former uses the system's Python binary by default:
```
$ ls -l venv/bin/python3.6
lrwxrwxrwx 1 foo foo 7 Jun 3 19:57 venv/bin/python3.6 -> /usr/bin/python3
```
The *virtualenv* tool uses a separate Python binary in the environment directory:
```
$ ls -l virtualenv/bin/python3.6
lrwxrwxrwx 1 foo foo 7 Jun 3 19:58 virtualenv/bin/python3.6 -> python3
```
## virtualenvwrapper
*virtualenvwrapper* allows more natural command line interaction with your virtual environemnts by exposing several useful commands to create, activate and remove virtual environments. This package is a wrapper for both [python-virtualenv](https://www.archlinux.org/packages/?name=python-virtualenv) and [python2-virtualenv](https://www.archlinux.org/packages/?name=python2-virtualenv).
### Installation
[Install](/index.php/Install "Install") the [python-virtualenvwrapper](https://www.archlinux.org/packages/?name=python-virtualenvwrapper) package from the [official repositories](/index.php/Official_repositories "Official repositories").
Now add the following lines to your `~/.bashrc`:
```
export WORKON_HOME=~/.virtualenvs
source /usr/bin/virtualenvwrapper.sh
```
Since python3 is a system-wide default in Arch, in order to be able to create python2 environments, you need to set `VIRTUALENVWRAPPER_PYTHON` and `VIRTUALENVWRAPPER_VIRTUALENV` prior to sourcing `virtualenvwrapper.sh` in your `~/.bashrc`:
```
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/bin/virtualenv2
```
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.
If you are not using python3 by default (check the output of `python --version`) you need to add the following line to your `~/.bashrc` prior sourcing the `virtualenvwrapper.sh` script.
```
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
```
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](http://www.doughellmann.com/docs/virtualenvwrapper/).
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
```
## See also
* [Python venv](https://docs.python.org/3/library/venv.html)
* [virtualenv PyPI page](https://pypi.org/project/virtualenv/)
* [virtualenvwrapper page at Doug Hellmann's](http://www.doughellmann.com/docs/virtualenvwrapper/)