2012-10-30 45 views
2

基本上,我需要知道它是安裝並添加到如何在運行時檢查Django中安裝的應用程序的版本?

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

我知道,我可以使用畫中畫凍結的特定應用程序的版本。我知道當前虛擬環境中的應用程序版本。

問題是我想支持兩個版本的應用程序。

喜歡的東西settings.INSTALLED_APP [「the_application」]。get_version()會是什麼,我找......

回答

5

模塊/應用程序將通常通過模塊級__version__屬性暴露它的版本。例如:

import gunicorn 
print gunicorn.__version__ # Prints version 

import haystack 
print haystack.__version__ 

一些注意事項是爲了:

  • 它並不保證;檢查
  • 應用程序將公開其版本的「格式」將有所不同。例如,上面的第一張照片在我的測試系統上打印了'0.15.0';第二個在同一個系統上打印(2, 0, 0, 'beta')
+0

參見:http://stackoverflow.com/questions/710609/checking-python-module-version-at-runtime和http://stackoverflow.com/questions/710609/checking-python-模塊版運行時 –

+0

什麼是偶然!乾草堆正是我的問題! –

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

當使用擴建和zestreleaser:

順便說一句,用建築和版本擴建和zest.releaser IAM。

在這種情況下,上面是有點不同(但基本上是相同的想法):

看到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 
相關問題