reposted from http://code.google.com/p/django-hotclub/wiki/MovingToDistutils

the how and why of Pinax's move to distutils

Pinax is changing the way that external dependencies are brought in during development on trunk. Note that this document is only talking about changes in how things work and will work on trunk, NOT necessarily how they will work with a released version of Pinax.

Until recently, Pinax had two choices for a given external dependency:

use svn:externals and point to the external dependency's svn repository

include the external dependency code in the Pinax codebase

However, there are problems with this approach:

it largely relies on external dependencies being in svn and this is increasingly not the case (although it was when Pinax started)

it makes it difficult for Pinax itself to move away from svn

there is no management of dependencies between external dependencies, nor between particular projects in Pinax and their individual dependencies

To solve these problems and more, Pinax is switching to a distutils-based approach. This means:

externals dependencies are encouraged to be released as distutil-compliant packages with a valid setup.py and put on PyPI

development versions of dependencies can be pulled in in a variety of different ways including from git, hg or bzr repositories

In order to develop from the Pinax trunk, you will need to use pip. Because some external dependencies are retrieved via git and bzr you will also need those if using Pinax trunk.

Although we will eventually have per-project requirements files, there are currently two requirements files that describe to pip what dependencies to bring in and how:

pinax/requirements/libs.txt

pinax/requirements/external_apps.txt

The former is actually a requirement of the latter so you can bring in all external dependencies with:

pip install -r pinax/requirements/external_apps.txt

We strongly recommend the use of virtualenv in conjunction with pip to allow isolated environments to be set up without Pinax having to hack PYTHONPATH.