Don't mess with system's site-packages

There is a lot of confusion out there how to install and manage python packages within systems and projects. There are some rules of thumb which keep you happy when heeded.

Stay away from system's site-packages

Many of today's system tools depend on Python and are tested against your system's packages and versions. Modifying your system's packages or their versions may lead to unexpected annoyances.

When using pip I would advice you to set PIP_REQUIRE_VIRTUALENV=True. By this pip will complain when you try to install stuff without any activated virtual environment.

Use PyPi packages

Don't depend on your system's site-packages for your apps and programs as they may change with every system update and thereby trash it.

Imagine you only defined python-requests as one of your app's dependencies. In Debian "jessie" this would lead to version 2.4.3-6 installed. In "wheezy" it would lead to 0.12.1-1+deb7u1. Sounds like a good chance to break your app.

Even if your software works flawlessly against your current system's packages a up- or downgrade of your system would have the potential to break your application.

Use virtualenv

Above rules lead inevitably to this one. virtualenv - if not heard of yet - leaves your system's site-packages untouched by introducing virtual environments. An environment consists of an isolated bunch of packages which don't affect your system's ones or those of the other environments.

For a even better virtualenv experience through some more comfort use virtualenvwrapper.

If you are working with graphical operating systems from Redmond you should virtualenvwrapper-win a try.

Use pipsi for CLI tools

You need some 3rd party CLI tools based on python, like Pygments, pip-tools, yolk, etc.? Or some of the requirements of those tools exclude some of each others dependencies? No problem. Use pipsi! pipsi sets up a virtualenv for each of your favorite CLI tools and hides them - the environments, not the tools - from you.