====== Python Virtual Environments ======
==== What and Why ====
A Virtual Environment is a tool to keep the dependencies required by different projects in separate places, by creating virtual Python environments for them. It solves the “Project X depends on version 1.x but, Project Y needs 4.x” dilemma, and keeps your global site-packages directory clean and manageable. For example, you can work on a project which requires Django 1.3 while also maintaining a project which requires Django 1.0. ((http://docs.python-guide.org/en/latest/dev/virtualenvs))
==== Other things you should know ====
- https://github.com/pypa/virtualenv/pull/697
- http://conda.pydata.org/docs/intro.html
==== Using Virtual Environments ====
The python virtual environment package is installed by default on most CS machines. To make sure you can do the following:
user@computer:~/projects$ which virtualenv
/usr/bin/virtualenv
==== Creating a new project ====
user@hester:~/projects$ virtualenv --no-site-packages exampleproject
The --no-site-packages flag is deprecated; it is now the default behavior.
New python executable in exampleproject/bin/python
Installing
distribute................................................................................done.
Installing pip...............done.
user@computer:~/projects$ ls -l exampleproject/
total 4
drwxrwxr-x 2 user group 4096 Nov 25 10:16 bin
drwxrwxr-x 2 user group 30 Nov 25 10:16 include
drwxrwxr-x 3 user group 30 Nov 25 10:16 lib
drwxrwxr-x 2 user group 56 Nov 25 10:16 local
user@computer:~/projects$ cd exampleproject/
==== Activate ====
Now you need to activate your virtual environment. This will setup some path variables to make the environments bin and lib directory to be the default.
user@computer:~/projects/exampleproject$ source bin/activate
(exampleproject)user@computer:~/projects/exampleproject$
==== Installing Modules ====
After activating the virtual environment you will notice that your prompt changed a little. This is not the only thing that has changed. Your $PATH and default python have changed as well (just checkout the bin/activate script to see what else it does).
Notice that the 'bin' directory in your virtual environment has been prepended to $PATH and the python and pip executables are inside the bin directory.
(exampleproject)user@computer:~/projects/exampleproject$ echo $PATH
/home/user/projects/exampleproject/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
(exampleproject)user@computer:~/projects/exampleproject$ which python
/home/user/projects/exampleproject/bin/python
(exampleproject)user@computer:~/projects/exampleproject$ which pip
/home/user/projects/exampleproject/bin/pip
So to actually install your own python modules you can use 'pip' or 'easy_install' to do so:
(exampleproject)user@computer:~/projects/exampleproject$ pip install docopt
Downloading/unpacking docopt
Downloading docopt-0.6.2.tar.gz
Running setup.py egg_info for package docopt
Installing collected packages: docopt
Running setup.py install for docopt
Successfully installed docopt
Cleaning up...
Notice where docopt was installed (~/projects/exampleproject/local/lib/python2.7/site-packages):
(exampleproject)user@computer:~/projects/exampleproject$ ls -l local/lib/python2.7/site-packages/docopt*
-rw------- 1 user group 19946 Mar 8 23:12 local/lib/python2.7/site-packages/docopt.py
-rw------- 1 user group 26140 Mar 8 23:12 local/lib/python2.7/site-packages/docopt.pyc
local/lib/python2.7/site-packages/docopt-0.6.2-py2.7.egg-info:
total 40
-rw------- 1 user group 1 Mar 8 23:12 dependency_links.txt
-rw------- 1 user group 86 Mar 8 23:12 installed-files.txt
-rw------- 1 user group 21525 Mar 8 23:12 PKG-INFO
-rw------- 1 user group 651 Mar 8 23:12 SOURCES.txt
-rw------- 1 user group 7 Mar 8 23:12 top_level.txt
==== Deactivate ====
To deactivate or stop working on your environment use the function that gets sourced when you activate your environment:
(exampleproject)user@computer:~/projects/exampleproject$ deactivate
user@computer:~/projects/exampleproject$