Easy Install has become kind of standard way to install Python package now day, with Python Package Index (PyPI) now officially at python.org (previously at Cheeseshop). So to install any modules in Python, you simply run the following command:-

$ easy_install Werkzeug

Provided you already have easy_install properly set up, that command would download Werkzeug and all it’s dependencies and install it in your Python site-packages directory. One problem I have is when working on a number of environment (through virtualenv) so the following transcript better explain the situation:-

Setting up a new virtual environment for project XXX.
This project use Werkzeug, Jinja2 and SqlAlchemy
$ virtualenv XXX
$ cd XXX
$ . ./bin/activate
$ easy_install Werkzeug
$ easy_install Jinja2
$ easy_install SQLAlchemy

Now I want to work on different environment, project YYY
which appear to use Pylons as a framework but still
depends on Jinja2 and SqlAlchemy
$ virtualenv YYY
$ cd YYY
$ . ./bin/activate
$ easy_install Pylons
$ easy_install Jinja2
$ easy_install SQLAlchemy

Here we can see that I have to download Jinja2 and SQLAlchemy from PyPI twice. There must be a better way. Reading through Pylons book, I’d noticed that we can actually specify -f to easy_install telling it the location of the eggs. So, what I did is, go through all the virtual environments site-packages directory, copying all the eggs into one directory (named as eggs):-

$ cd XXX/lib/python2.5/site-packages
$ cp -a *.egg ~/python/eggs
And now to install any eggs that already exists on my local system
$ easy_install -f /home/kamal/python/eggs Jinja2

Now I can grab all my favourite eggs from PyPI and no need to worry anymore PyPI would goes down in the time I really need it.