This post is roughly 11 years old; originally published on December 11, 2012! The information presented here may be out of date and inaccurate.
We use Python for pretty much all our software development at work. We also use virtualenv and virtualenvwrapper extensively, both for development and deployment.
It just is. Read the virtualenv documentation.
If you’re a Python developer you need virtualenv
in your life. You also need
virtualenvwrapper
too.
virtualenvwrapper is a set of extensions to Ian Bicking’s virtualenv tool for creating isolated Python development environments.
Outlined below is how I install Python and virtualenvwrapper
. We have not
yet made the jump to Python 3 at work, hence the references to Python 2.6 and
2.7. Some of us develop on Arch Linux, but all deployments are on Ubuntu.
As Arch Linux is a rolling release we can simply install everything via
pacman
.
sudo pacman -Syy
sudo pacman -S --needed --noconfirm python-pip python-setuptools python-virtualenv
sudo pacman -S --needed --noconfirm python2-pip python2-setuptools python2-virtualenv python-virtualenvwrapper"
Simple.
The following was done on Ubuntu Lucid 10.04 LTS.
Add some essential PPAs.
sudo apt-add-repository ppa:bzr/ppa
sudo apt-add-repository ppa:git-core/ppa
sudo apt-add-repository ppa:fkrull/deadsnakes
Update the system and install Python 2.6 and 2.7.
sudo apt-get update
sudo apt-get install libpython2.6 python2.6 python2.6-dev python2.6-minimal
sudo apt-get install libpython2.7 python2.7 python2.7-dev python2.7-minimal
Remove any apt
installed Python packages that we are about to repalce. The
versions of these packages in the Ubuntu repos and PPAs are too old.
sudo apt-get purge python-setuptools python-virtualenv python-pip python-profiler
Install distribute
.
curl -O http://python-distribute.org/distribute_setup.py
sudo python2.6 distribute_setup.py
sudo python2.7 distribute_setup.py
Install pip
.
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python2.6 get-pip.py
sudo python2.7 get-pip.py
Use pip
to install virtualenv
and virtualenv
wrapper.
sudo pip-2.6 install virtualenv --upgrade
sudo pip-2.7 install virtualenv --upgrade
sudo pip install virtualenvwrapper
Fairly simple.
This step is common to Arch Linux and Ubuntu. Create a “Snakepit” directory for storing all the virtualenvs.
mkdir ~/Snakepit
Add the following your ~/.bashrc
to enable virtualenvwrapper
.
export WORKON_HOME=${HOME}/Snakepit
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
source /usr/local/bin/virtualenvwrapper.sh
elif [ -f /usr/bin/virtualenvwrapper.sh ]; then
source /usr/bin/virtualenvwrapper.sh
fi
Open a new shell to ensure that the virtualenvwrapper
configuration is
active.
The following will create a new virtualenv called Nikola5
based on Python
2.7 and will not give access to the global site-packages
directory.
mkvirtualenv -p python2.7 --no-site-packages ~/Snakepit/Nikola5
mkvirtualenv_help
shows a full list of arguments, the -r
switch can install
all the packages listed in a pip
requirements file into the newly created
virtualenv. Very useful.
To workon, or activate, an existing virtualenv do the following.
workon Nikola5
You can switch to another virtualenv at any time, just use workon envname
.
Your shell prompt will change while a virtualenv is being worked on to indicate
which virtualenv is currently active.
While working on a virtualenv you can pip
install what you need or manually
install any Python libraries safe in the knowledge you will not adversely
damage any other virtualenvs or the global packages in the process. Very useful
for developing a new branch which may have different library requirements than
the master/head.
When you are finished working in a virtualenv you can deactivate it by simply executing:
deactivate
That just about sums up my notes.