[Distutils] Getting an egg's version: better way?
Phillip J. Eby
pje at telecommunity.com
Thu Mar 15 17:34:14 CET 2007
At 10:48 AM 3/15/2007 -0400, Nathan R. Yergler wrote:
>I have a situation where I want to get the version of an egg that's
>installed. I figured out the following, but wanted to know if I'm
>missing something obvious that's easier::
>
> >>> import pkg_resources
> >>> p = pkg_resources.get_provider("cctagutils")
> >>> for line in p.get_metadata_lines("PKG-INFO"):
> ... if line.find('Version: ') == 0:
> ... version = line.split()[-1]
The problem with using get_provider() and a module name, is that it cannot
conclusively associate a package with a specific project. Thus, your code
above has a bug: it will not find a version of a package that's installed
by a system packaging tool such as RPM, or a bdist .exe or .msi on Windows.
You need to use a project name instead of a package/module name, e.g.:
version = pkg_resources.require('ProjectNameHere')[0].version
This will work even with projects installed using system packaging tools,
as it explicitly indicates what project's PKG-INFO will be read, if in fact
it needs to be read at all. (In most cases, pkg_resources will get the
project's version number from a filename, without needing to open any files.)
More information about the Distutils-SIG
mailing list