Как повторно использовать многоразовое приложение в 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, а затем распространите обновление на свои развертывания через он.