如何在运行时检查Django中已安装应用程序的版本?

时间:2012-10-30 18:31:52

标签: django

我基本上需要知道它安装并添加到

的特定应用程序的版本
INSTALLED_APPS = (
    ...
    'the_application',
    ...
)

我知道我可以使用pip冻结。我知道当前虚拟环境中的应用程序版本。

问题是我想支持两个版本的the_application。

像settings.INSTALLED_APP ['the_application']。get_version()这样的东西就是我要找的......

3 个答案:

答案 0 :(得分:6)

模块/应用程序通常会通过模块级__version__属性公开其版本。例如:

import gunicorn
print gunicorn.__version__ # Prints version

import haystack
print haystack.__version__ 

有些警告是有道理的:

  • 不保证;检查
  • 应用程序将公开其版本的“格式”将有所不同。例如,我的测试系统上面的第一张打印'0.15.0';第二个在同一系统上打印(2, 0, 0, 'beta')

答案 1 :(得分:3)

这取决于应用程序如何管理版本控制。例如django-tagging has a tuple VERSION that you can check and a get_version() to return the string函数。因此,无论您想要检查版本(在运行时实时),只需执行:

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

答案 2 :(得分:0)

感谢Ngure Nyaga! 你的回答对我有所帮助,但它没有告诉我把 vesrion

放在哪里

然而,这个答案并没有告诉我把这个__version__

放在哪里

所以我查看了一个打开的应用程序,该版本确实显示在django debugtoolbar中。 我查看了django restframework代码,在那里我发现:

版本放在__init__.py文件

(见https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/init.py

它被放在这里:

__version__ = '2.2.7'
VERSION = __version__  # synonym

在此之后,在他的setup.py中,他从这个__init__.py获得了这个版本: 见:https://github.com/tomchristie/django-rest-framework/blob/master/setup.py

像这样:

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')

使用buildout和zestreleaser:

顺便说一句,IAm使用buildout和zest.releaser进行构建和版本控制。

在这种情况下,上面有点不同(但基本上是相同的想法):

请参阅http://zestreleaser.readthedocs.org/en/latest/versions.html#using-the-version-number-in-setup-py-and-as-version

setup.py中的版本由setup.py自动编号,因此在__init__.py中您可以执行以下操作:

import pkg_resources

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