Что такое хороший способ упаковки приложений Django? - PullRequest
5 голосов
/ 28 августа 2009

У меня есть проект django, который устанавливается клиентами на их серверах. У меня есть еще несколько приложений, которые являются дополнительными плагинами функциональности, которые могут быть установлены / удалены.

Я хотел бы упростить упаковку этих приложений плагинов, чтобы сделать установку / удаление безболезненной. Я не хочу, чтобы они копировали файлы шаблонов в один каталог, приложения в другой, медиа в третий и так далее. Я бы предпочел, чтобы им не нужно редактировать settings.py, хотя все в порядке, если это не помогло.

Идеальная ситуация была бы, если бы они могли просто разархивировать в папку на пути к python (может быть, специальный каталог плагинов?) И удалить его, чтобы удалить. Есть ли простой способ упаковать приложения, чтобы их можно было установить таким образом?

Ответы [ 2 ]

4 голосов
/ 29 августа 2009

Я пропущу обсуждение упаковки Python (distutils, setuptools, pip и т. Д.), Поскольку кажется, что вы предпочитаете использовать простые zip-файлы или архивы. Я рассмотрю "болевые точки", которые вы упомянули по одному:

Файлы шаблонов : Пока у вас есть параметр django.template.loaders.app_directories.load_template_source, включенный в настройку TEMPLATE_LOADERS ваших проектов, вам не нужно беспокоиться об этом. Каждое из ваших приложений может иметь подкаталог «templates /», и шаблоны в нем будут загружаться так же, как если бы они находились в вашем каталоге шаблонов для всего проекта.

Медиа-файлы : Медиа-приложение - это боль. Для разработки вы можете использовать пользовательское представление serve_media, которое работает аналогично загрузчику шаблонов app_directories (ищет медиа в каждом приложении). В производственной среде вы должны либо скопировать файлы, либо использовать символические ссылки, либо использовать псевдонимы уровня веб-сервера. Есть несколько служебных приложений, которые пытаются сгладить эту проблему; Я сейчас использую django-staticfiles .

Редактирование settings.py : Нет простого способа обойти это. Для работы моделей, тегов шаблонов, команд управления и т. Д. Приложение должно быть указано в INSTALLED_APPS. Что вы могли бы сделать, это написать в вашем файле settings.py некоторый пользовательский код, который перечисляет содержимое определенного каталога и динамически добавляет найденные там пакеты в INSTALLED_APPS. Немного опасно (подумайте о том, у кого есть права на размещение файлов в этом каталоге, потому что у них есть ключи от вашего королевства), и новые файлы там будут обнаруживаться только при перезагрузке сервера, но это должно сработать.

Я думаю, что если вы соберете эти решения, можно достичь идеальной ситуации: разархивировать для установки, удалить для удаления.

1 голос
/ 29 августа 2009

Редактирование settings.py : Ваш плагин может читать свои настройки из собственного файла настроек в своем собственном каталоге. Им нужно всего лишь отредактировать корневой файл settings.py, чтобы добавить / удалить путь к плагину из "INSTALLED_APPS".

...