Maybe it is time to consider using virtualenv. Virtualenv creates self-contained python environments using the python version you specify. After activating the new virtual environment, everything you install using pip goes under that environment. This helps avoid situations like the one you described.
E.g. create and activate a new python environment using the default python:
# create environment $ virtualenv --distribute myproject New python executable in myproject/bin/python Installing distribute...done. Installing pip...done. # activate environment $ . ./myproject/bin/activate # check default python (myproject)$ which python /Users/me/myproject/bin/python
It is suggested to use the --distribute
options to indicate that distribute should be used for installing packages in the new environment instead of (the older) setuptools. After activation your command prompt changes to indicate which python environment is active.
Now install some package. The files will go into myproject directory:
# install django (myproject)$ pip install django ... # search for django dir (myproject)$ find myproject -iname django myproject/lib/python2.7/site-packages/django
Finally, deactivate:
# deactivate and check for default python (myproject)$ deactivate $ which python /usr/bin/python
To create an environment using a non-default version of python:
$ virtualenv --distribute -p /path/to/custom/python mynewproject
By default virtualenv will copy to the new environment any packages installed for the python version you use to bootstrap it. To prevent this and create an empty environment use the --no-site-packages
option. This is especially useful to create environments which can be exactly replicated e.g. from development to production.
Update: As of version 1.7 --no-site-packages
has become the default behaviour of virtualenv.
If you want more details, there are plenty of tutorials and blog posts online. E.g.:
- Notes on using pip and virtualenv with Django. (most of the post is not django-specific)
- Working with virtualenv.
Give it a try and I'm sure you'll stick with it.
Note: Make sure that your executable scripts do not have the python interpreter hardcoded. I.e. their first line should be #!/usr/bin/env python
and not something like #!/usr/bin/python
.