On Jul 10, 2009, at 6:58 AM, Marius Gedminas wrote:

What do people use to avoid repeating the version number both in the setup.py as well as in application/library code, when the application/library wants to know its own version number?

I have a script that reads revision control history and writes out a _version.py file with just "verstr='1.2.3'" in it.

Then my setup.py does this:

PKG = "zfec"
VERSIONFILE = PKG+"/_version.py"
verstr = "unknown"
try:
    verstrline = open(VERSIONFILE, "rt").read()
except EnvironmentError:
    pass # Okay, there is no version file.
else:
    VSRE = r"^verstr = ['\"]([^'\"]*)['\"]"
    mo = re.search(VSRE, verstrline, re.M)
    if mo:
        verstr = mo.group(1)
    else:
        print "unable to find version in %s" % (VERSIONFILE,)
raise RuntimeError("if %s.py exists, it is required to be well-formed" % (VERSIONFILE,))


I packaged up the script that reads revision control history (darcs) and writes out the _version.py file as "darcsver": http:// pypi.python.org/pypi/darcsver . It can be invoked as a command-line tool or a setuptools plugin.

I also then extended the darcsver setuptools plugin so that it would do effectively the same thing as the above code, so that I don't have to copy that code into each of my setup.py files. Unfortunately issue20 of setuptools (http://bugs.python.org/setuptools/msg235 ) means that at most one of my packages can use darcsver to do that in the same build, so currently my Tahoe project uses darcsver to set the "version" attribute and doesn't have that code snippet that I pasted above, but my other projects (many of which Tahoe depends on) have that code snippet in the setup.py.

Regards,

Zooko
_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to