[Distutils] [setuptools] How to maintain version strings?
Phillip J. Eby
pje at telecommunity.com
Sun Dec 18 17:33:34 CET 2005
At 02:47 PM 12/18/2005 +0000, John J Lee wrote:
>I also want to avoid importing code from setup.py, because people
>sometimes want to install using a Python executable other than the one
>with which they intend to import the package (I assume that's sensible &
>possible with setuptools packages), and imports in setup.py have broken
>that in the past.
It's also a big problem if you have dependencies that you import;
setuptools doesn't install your dependencies until after the setup script
has effectively run to completion, so you might be trying to import stuff
that's not yet installed.
>Seems I can't just open('mymodule.py') and find the version string with a
>regexp, I assume because of setuptools' "sandbox".
I don't see why not; the sandbox should only restrict *writing* to files,
not reading them, and in any case it only restricts writing *outside* the
subdirectory tree where the setup script is located.
>Anybody have a way of doing this (or a slap to my forehead to teach me the
>simple way to do it ;-)?
The 'networkx' project on PyPI does this by having a 'release.py' inside
the main package that contains all the variables that need to be shared
between the package and the setup script. The setup script uses
execfile('packagename/release.py') to obtain the variables, while the
package does a 'from release import *'. Thus, the variables are in a
I use a slightly different technique myself; PEAK includes a tool called
'version' that can automatically edit a variety of files and update the
included version numbers in a variety of user-defined formats. When I bump
setuptools alpha versions, I just run "version incr build" to bump the
micro number. When I move from say, 0.6 to 0.7, I run "version incr
minor". Anyway, it basically works by having a configuration file
describing what to search for and edit in each file that contains the
version number, as well as what parts there are in my versioning scheme and
the different formats for "spelling" that versioning scheme. The
configuration file itself has a "#!peak version-config" line that makes it
executable, so I just run it to update my release scripts, setup.py,
__version__ variables, etc.
I believe there is at least one other tool out there that does something
similar on SourceForge, but I don't remember its name.
More information about the Distutils-SIG