我基本上需要知道它安装并添加到
的特定应用程序的版本INSTALLED_APPS = (
...
'the_application',
...
)
我知道我可以使用pip冻结。我知道当前虚拟环境中的应用程序版本。
问题是我想支持两个版本的the_application。
像settings.INSTALLED_APP ['the_application']。get_version()这样的东西就是我要找的......
答案 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进行构建和版本控制。
在这种情况下,上面有点不同(但基本上是相同的想法):
setup.py中的版本由setup.py自动编号,因此在__init__.py
中您可以执行以下操作:
import pkg_resources
__version__ = pkg_resources.get_distribution("fill in yourpackage name").version
VERSION = __version__ # synonym