Difference between revisions of "Python/Virtual environment"

From ArchWiki
Jump to: navigation, search
(Fix python version check)
m (Installation: fix pkg link)
 
(30 intermediate revisions by 16 users not shown)
Line 1: Line 1:
 
[[Category:Development]]
 
[[Category:Development]]
{{Out of date}}
+
[[es:Python VirtualEnv]]
 +
[[ja:Python VirtualEnv]]
 +
[[zh-cn:Python/Virtualenv]]
 +
''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.
  
''virtualenv'' is a Python tool written by Ian Bicking and used to create isolated environments for Python in which you can install packages without interfering with the other virtualenvs nor with the system Python's packages.
+
== Overview ==
The present article covers the installation of the ''virtualenv'' package and its companion command line utility ''virtualenvwrapper'' designed by Doug Hellmann to (greatly) improve your work flow. A quick how-to to help you to begin working inside virtual environment is then provided.
+
  
==Virtual Environments at a glance==
+
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.
''virtualenv'' is a tool designated to address the problem of dealing with packages' dependencies while maintaining different versions that suit projects' needs. For example, if you work on two Django web sites, say one that needs Django 1.2 while the other needs the good old 0.96. You have no way to keep both versions if you install them into /usr/lib/python2/site-packages . Thanks to virtualenv it's possible, by creating two isolated environments, to have the two development environment to play along nicely.
+
  
''vitualenvwrapper'' takes ''virtualenv'' a step further by providing convenient commands you can invoke from your favorite console.
+
== Installation==
  
== Virtualenv ==
+
[[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.
  
''virtualenv'' supports Python 2.5+ and Python 3.x.
+
=== Packages ===
  
===Installation===
+
[[Install]] one of these packages from the [[official repositories]] to use a Python virtual environment.
Simply install from the community repository:
+
* Python 3.3+: {{pkg|python}}
# pacman -S python2-virtualenv
+
* Python 3: {{pkg|python-virtualenv}}
or
+
* Python 2: {{pkg|python2-virtualenv}}
# pacman -S python-virtualenv
+
  
===Basic Usage===
+
== Usage ==
An extended tutorial on how use ''virtualenv'' for sandboxing can be found [http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox here].
+
  
The typical use case is:
+
All three tools use a similar workflow.
* Create a folder for the new virtualenv:
+
$ mkdir -p ~/.virtualenvs/my_env
+
* Create the virtualenv:
+
$ virtualenv2 ~/.virtualenvs/my_env
+
* Activate the virtualenv:
+
$ source ~/.virtualenvs/my_env/bin/activate
+
* Install some package inside the virtualenv (say, Django):
+
(my_env)$ pip install django
+
* Do your things
+
* Leave the virtualenv:
+
(my_env)$ deactivate
+
  
== Virtualenvwrapper ==
+
=== Creation ===
  
''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 {{Pkg|python-virtualenv}} and {{Pkg|python2-virtualenv}}.
+
Use ''pyvenv'' or ''virtualenv'' to create the virtual environment within your project directory. Be sure to exclude the venv directory from version control--a copy of {{ic|pip freeze}} will be enough to rebuild it.
===Installation===
+
 
[[pacman|Install]] the {{Pkg|python-virtualenvwrapper}} package from the [[Official Repositories|official repositories]].
+
==== pyvenv ====
 +
 
 +
This tool is provided by {{pkg|python}} (3.3+).
 +
$ pyvenv venv
 +
 
 +
==== virtualenv ====
 +
 
 +
Use ''virtualenv'' for Python 3, available in {{pkg|python-virtualenv}}.
 +
$ virtualenv venv
 +
 
 +
And ''virtualenv2'' for Python 2, available in {{pkg|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 {{ic|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 {{ic|bin/python2.7}}, while the one in the ''pyvenv'' example points to {{ic|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 ==
 +
 
 +
''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 {{Pkg|python-virtualenv}} and {{Pkg|python2-virtualenv}}.
 +
 
 +
=== Installation ===
 +
 
 +
[[Install]] the {{Pkg|python-virtualenvwrapper}} package from the [[official repositories]].
  
 
Now add the following lines to your {{ic|~/.bashrc}}:
 
Now add the following lines to your {{ic|~/.bashrc}}:
  
  export WORKON_HOME=~/.virtualenvs
+
  $ export WORKON_HOME=~/.virtualenvs
  source /usr/bin/virtualenvwrapper.sh
+
  $ source /usr/bin/virtualenvwrapper.sh
  
If you are not using python3 by default (check the output of {{ic|$ python --version}}) you also need to add the following line to your {{ic|~/.bashrc}} prior sourcing the {{ic|virtualenvwrapper.sh}} script. The current version of the {{ic|virtualenvwrapper-python}} package only works with python3. It can create python2 virtualenvs fine though.
+
If you are not using python3 by default (check the output of {{ic|python --version}}) you also need to add the following line to your {{ic|~/.bashrc}} prior sourcing the {{ic|virtualenvwrapper.sh}} script. The current version of the {{Pkg|python-virtualenvwrapper}} package only works with python3. It can create python2 virtual environments fine though.
  
 
  VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
 
  VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
Line 54: Line 86:
 
  $ mkdir $WORKON_HOME
 
  $ mkdir $WORKON_HOME
  
===Basic Usage===
+
=== Basic usage ===
 +
 
 
The main information source on virtualenvwrapper usage (and extension capability) is Doug Hellmann's [http://www.doughellmann.com/docs/virtualenvwrapper/ page].
 
The main information source on virtualenvwrapper usage (and extension capability) is Doug Hellmann's [http://www.doughellmann.com/docs/virtualenvwrapper/ page].
  
* Create the virtualenv:
+
Create the virtual environment:
  $ mkvirtualenv -p python2.7 my_env
+
  $ mkvirtualenv -p /usr/bin/python2.7 my_env
* Activate the virtualenv:
+
 
 +
Activate the virtual environment:
 
  $ workon my_env
 
  $ 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 ==
+
Install some package inside the virtual environment (say, Django):
*[http://pypi.python.org/pypi/virtualenv virtualenv Pypi page]
+
(my_env) $ pip install django
*[http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox Tutorial for virtualenv]
+
 
*[http://www.doughellmann.com/docs/virtualenvwrapper/ virtualenvwrapper page at Doug Hellmann's]
+
After you have done your things, leave the virtual environment:
 +
(my_env) $ deactivate
 +
 
 +
== See also ==
 +
 
 +
* [https://docs.python.org/3/library/venv.html Python venv (pyvenv)]
 +
* [https://pypi.python.org/pypi/virtualenv virtualenv Pypi page]
 +
* [http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox Tutorial for virtualenv]
 +
* [http://www.doughellmann.com/docs/virtualenvwrapper/ virtualenvwrapper page at Doug Hellmann's]

Latest revision as of 16:14, 11 July 2016

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.

Installation

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.

Packages

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

Usage

All three tools use a similar workflow.

Creation

Use pyvenv 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.

pyvenv

This tool is provided by python (3.3+).

$ pyvenv venv

virtualenv

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

$ virtualenv venv

And virtualenv2 for Python 2, available in 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 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

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 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

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 virtualenvwrapper.sh script. The current version of the python-virtualenvwrapper package only works with python3. It can create python2 virtual environments fine though.

VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

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 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