I basically need to know the version of an specific application that it is installed and added to

INSTALLED_APPS = ( ... 'the_application', ... ) 

I know that I can use pip freeze. I know the version of the application in my current virtual environment.

The problem is I want to support two versions of the_application.

Something like settings.INSTALLED_APP['the_application'].get_version() would be what I am looking for...

3 Answers

A module / app will typically expose its version via a module level __version__ attribute. For example:

import gunicorn print gunicorn.__version__ # Prints version import haystack print haystack.__version__ 

Some caveats are in order:

  • It is not guaranteed; check
  • The "format" in which the app will expose its version will differ. For example, the first print above printed '0.15.0' on my test system; the second one printed (2, 0, 0, 'beta') on the same system.
2

It depends on how the application has managed it versioning. For example django-tagging has a tuple VERSION that you can check and a get_version() to return the string function. So where ever you want to check the version (live at run time), just do:

import tagging print tagging.get_version() # or print tagging.VERSION for the tuple 

thanks Ngure Nyaga! Your answer helped me a bit further, but it does not tell me where to put the vesrion

This answer however does not tell me where to put this __version__

So I looked in to an open application, which version does show up in django debugtoolbar. I looked in to the django restframework code, there I found out:

the version is put in the __init__.py file

(see init.py)

and it is put here as:

__version__ = '2.2.7' VERSION = __version__ # synonym 

And after this, in his setup.py, he gets this version from this __init__.py : see:

like this:

import re def get_version(package): """ Return package version as listed in `__version__` in `init.py`. """ init_py = open(os.path.join(package, '__init__.py')).read() return re.match("__version__ = ['\"]([^'\"]+)['\"]", init_py).group(1) version = get_version('rest_framework') 

When using buildout and zestreleaser:

By the way, IAm using buildout and zest.releaser for building and versioning.

In this case, above is a bit different (but basically the same idea):

see

The version in setup.py is automatically numbered by setup.py, so in __init__.py you do:

import pkg_resources __version__ = pkg_resources.get_distribution("fill in yourpackage name").version VERSION = __version__ # synonym 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy