Как повторно использовать многоразовое приложение в Django


Я пытаюсь создать свой первый сайт в Django, и поскольку я ищу, например, приложения, чтобы черпать вдохновение, я постоянно натыкаюсь на термин "многоразовые приложения".

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

каков предпочтительный способ повторного использования существующие приложения в Django? Куда я его кладу и как на него ссылаться?

из того, что я понимаю, рекомендуется поместить его на свой "PYTHONPATH", но это ломается, как только мне нужно развернуть мое приложение в удаленном месте, к которому у меня есть ограниченный доступ (например, на хостинге).

Итак, если я разрабатываю свой сайт на своем локальном компьютере и намерен развернуть его на ISP, где у меня есть только ftp-доступ, как мне повторно использовать сторонние приложения Django, чтобы при развертывании моего сайта Сайт продолжает работать (например, единственное, на что я могу рассчитывать, это то, что у поставщика услуг есть Python 2.5 и Django 1.X установлен)?

Как организовать мой проект Django, чтобы я мог легко развернуть его вместе со всеми многоразовыми приложениями, которые я хочу использовать?

2 ответов


в общем, единственное, что требуется для использования многоразового приложения, - это убедиться, что оно включено sys.path, Так что вы можете импортировать его из Python-кода. В большинстве случаев (если автор придерживается наилучшей практики) многоразовое приложение tarball или bundle будет содержать каталог верхнего уровня с docs, README, a setup.py, а затем подкаталог, содержащий реальное приложение (см. Джанго-голосования для примера; само приложение находится в подкаталоге "голосование"). Этот подкаталог-это то, что нужно разместить в пути Python. Возможные методы для этого включают:

  • под управлением pip install appname, если приложение было загружено PyPI (в наши дни большинство из них)
  • установка приложения с setup.py install (это имеет тот же результат, что и pip install appname, но требует, чтобы вы сначала загрузили и распаковали код самостоятельно; pip сделает это за вас)
  • вручную symlinking каталог кода к вашему сайту Python-каталог пакетов
  • использование программного обеспечения как virtualenv чтобы создать "виртуальную среду Python", которая имеет свой собственный каталог site-packages, а затем работает setup.py install или pip install appname С этим virtualenv активным, или размещение или символическая ссылка приложение в virtualenv site-packages (настоятельно рекомендуется по всем параметрам "глобальной установки", если вы цените ваше будущее здравомыслие)
  • размещение приложения в некотором каталоге, где вы собираетесь разместить различные приложения, а затем добавить этот каталог в PYTHONPATH переменная окружения

вы будете знать, что у вас есть это в нужном месте, если вы можете запустить интерпретатор Python и "импортировать голосование" (например) без получения ImportError.

на сервере, где у вас есть только FTP-доступ, ваш единственный вариант-действительно последний, и они должны настроить его для вас. Если они утверждают, что поддерживают Django, они должны предоставить какой-то место, куда вы можете загружать пакеты и они будут доступны для импорта в Питон. Не зная деталей вашего веб-хоста, невозможно сказать, как они структурируют это для вас.


старый вопрос, но вот что я делаю:

Если вы используете систему управления версиями (VCS), я предлагаю поместить все многоразовые приложения и библиотеки (включая django), которые нужны вашему программному обеспечению в VCS. Если вы не хотите помещать их непосредственно под корень проекта, вы можете изменить settings.py чтобы добавить их местоположение в sys.путь.

после этого развертывания так же просто, как клонирование или проверка репозитория VCS туда, где вы хотите использовать он.

Это имеет два преимущества:

  • несоответствие версий; ваше программное обеспечение всегда использует версию, с которой Вы ее тестировали, а не версию, которая была доступна во время развертывания.
  • если несколько человек работают над проектом, никто не имеет дело с установкой зависимостей.

когда пришло время обновить версию компонента, обновите его в VCS, а затем распространите обновление на свои развертывания через он.