2009-06-09 61 views
1

查看Practical Django Projects的可重用應用程序章節並聽取DjangoCon(Pycon?)講座之後,似乎強調通過將應用程序安裝到Python路徑(即站點包)來使您的應用程序可插入。在Django中安裝的應用程序 - 版本是什麼?

我不明白當安裝的其中一個應用程序的版本發生變化時會發生什麼。如果我更新安裝到網站包的其中一個應用程序,那麼是否會破壞我當前使用它的所有項目?我從來沒有注意到settings.py中的任何內容,讓您指定要導入的應用程序的版本。

我覺得在Ruby/Rails中,他們能夠凍結寶石出現這種情況。但是,我們應該在Python/Django中做什麼?

回答

5

讓同一個包的多個版本變得混亂(setuptools可以做到這一點)。

我發現它吸塵器把每個項目都在自己的virtualenv。我們使用virtualevwrapper來輕鬆管理virtualenvs,並使用--no-site-packages選項來使每個項目真正獨立並可跨機器移植。

這是recommended setup for mod_wsgi servers

+0

將virtualenv與pip結合使用使其更好。 – Apreche 2009-06-10 20:41:14

0

你肯定不希望把你的Django應用歸入站點包,如果你有一個以上的Django的網站。

最好的辦法,因爲肯·阿諾德回答,是使用伊恩Bicking的virtualenv(虛擬Python環境生成器)。如果您必須運行多個版本的Django,則尤其如此。

但是,如果你可以運行Python和Django的單一版本,那麼這可能是一個比較容易的應用程序只安裝到你的項目目錄。通過這種方式,如果外部應用程序得到更新,您可以根據需要逐個升級每個項目。這是用於外部Django應用程序的結構Pinax,但我認爲它現在使用virtualenv + pip(而不是setuptools/distutils)。

0

我們做什麼。

我們只把「第三方」的東西放在網站包中。 Django的,XLRD,PIL等

我們保持我們的結構化包和Django的項目的集合,整體項目。每個項目都是整個網站的一部分。我們有兩個單獨的端口80和端口443(SSL)行爲。

OverallProject/ 

    aPackage/ 
    anotherPackage/ 

    djangoProject80/ 
     settings.py 
     logging.ini 
     app_a_1/ 
      models.py # app a, version 1 schema 
     app_a_2/ 
      models.py # app a, version 2 schema 
     app_b_2/ 
      models.py 
     app_c_1/ 
      models.py 

    djangoProject443/ 

    test/ 
    tool/ 

我們使用版本號作爲應用程序名稱的一部分。這是主要的版本號,並且與模式綁定,因爲「uses-the-same-schema」是主要版本兼容性的一個定義。

您必須遷移數據並證明這些數據在新版本中有效。然後,您可以刪除舊版本並從數據庫中刪除模式。遷移數據具有挑戰性,因爲您無法並行運行這兩個應用程序。

大多數應用程序只安裝了一個當前版本。

相關問題