我會跳過Python打包(的distutils,setuptools的,畫中畫等)的討論,因爲它聽起來就像你更喜歡使用簡單的zip文件或壓縮包。我會解決「痛點」,你提到一次一個:
模板文件:只要你有「django.template.loaders.app_directories.load_template_source」包含在你的項目的TEMPLATE_LOADERS設置,你不應該擔心這個。每個應用程序都可以有一個「templates /」子目錄,其中的模板將被加載,就像它們在您的項目範圍的模板目錄中一樣。
媒體文件:應用介質是一種痛苦。對於開發,您可以使用與app_directories模板加載器類似的自定義serve_media視圖(在每個應用程序中查找媒體)。在生產中,您必須複製文件,使用符號鏈接或使用Web服務器級別別名。有幾個實用程序應用程序試圖緩解這個問題;我現在使用django-staticfiles。
編輯settings.py:圍繞這一沒有簡單的方法。要使其模型,模板標籤,管理命令等起作用,必須在INSTALLED_APPS中列出應用程序。你可以做的是在settings.py中寫一些自定義代碼,它列出了某個目錄的內容,並動態地將它找到的包添加到INSTALLED_APPS。有點危險(仔細考慮誰有權將文件放在該目錄中,因爲他們有你的王國的鑰匙),並且只有在服務器重新加載時才能檢測到新文件,但它應該可以工作。
我認爲,如果你放在一起這些解決方案,它可以實現你理想的情況:解壓安裝,刪除卸載。
感謝您鏈接到djano-media-utils。那是機制中最大的痛苦。希望我們也可以指定多個媒體目錄。 我想動態地添加到INSTALLED_APPS是一個選項。由於您需要訪問服務器以放置插件,因此他們安裝人員可以訪問所有文件。你以前試過這個嗎? – Siddhi 2009-08-29 04:30:32
不,我從來沒有試過動態的INSTALLED_APPS設置。在概念上,沒有太複雜的東西。在實踐中,有一個問題可能是需要在插件目錄中添加/刪除應用程序時重新啓動生產Web服務器。另外,如果插件應用程序可以包含模型,則需要制定必要的syncdb計劃。 – 2009-08-29 14:27:14