Specifying package versions
We have discussed numerous Buildout recipes in this book, but no Buildout extensions (http://pypi.python.org/pypi/zc.buildout#extensions) until now. A Buildout extension is different from a recipe in a few important ways:
Extensions do not define any new sections, whereas recipes are often used within a section (although a section can be defined without a recipe)
Extensions are run after Buildout reads its configuration files, but before it executes them
Extensions are defined within the buildout section
That being said, you do not need to worry too much about the difference; just be aware of which one you are using.
If you know something is an extension, then it should be defined in the buildout
section. If it is a recipe, it should be defined in its own section.
We are going to use the buildout.dumppickedversions (http://pypi.python.org/pypi/buildout.dumppickedversions) extension to help us figure out which package's versions are unspecified (which means effectively...