Reputation: 19027
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...
Upvotes: 2
Views: 14935
Reputation: 5906
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 https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/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: https://github.com/tomchristie/django-rest-framework/blob/master/setup.py
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):
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
Upvotes: 0
Reputation: 3027
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:
'0.15.0'
on my test system; the second one printed (2, 0, 0, 'beta')
on the same system.Upvotes: 8
Reputation: 53971
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
Upvotes: 4