If your build tool is already generating the build numbers, why not have it fill in a template version.py in your project?
project/
project/__init__.py
project/version.py
Where version.py is simply:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__all__ = ('__version__',)
__version__ = $BUILD_NUMBER
This way, it is always available and doesn't depend on something like setup.py metadata. For your setup.py script, try something like this:
def get_version():
"""
Gets the latest version number out of the package,
saving us from maintaining it in multiple places.
"""
local_results = {}
execfile('project/version.py', {}, local_results)
return local_results['__version__']
setup(
name="Project",
version=get_version(),
...
)