Как распределить Приложение Python/Django через об/мин

Я перечитал по этому вопросу, и я думаю, что это - большой запуск, но я ищу больше понимания.

Я записал приложение с помощью Python 2.6 и Django 1.2.1. Я хотел бы развернуть это приложение в системе, которой не установили Python 2.6 или Django. Сама система не имеет многих вещей установленными - sqlite3, pysqlite2, gcc, и т.д. Система действительно имеет Python 2.4.3, как бы то ни было.

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

Я не знаю много о создании источника RPMs, но я подозреваю, что это - легко доступная информация. Если бы существуют какие-либо особенно хорошие ресурсы для создания источника RPMs, я ценил бы их также.

Системой является Обновление ESX 4 1, если это имеет значение.

Спасибо!

ОБНОВЛЕНИЕ: мне также никогда не приходило в голову, что распределительные яйца Python или даже использующий setup.py являются эффективным решением распространения контента. Я интересовался бы слушанием об этом также.

7
задан Community 23 May 2017 в 10:30
поделиться

3 ответа

Пакеты Python обычно распространяются с помощью setuptools / distribute . Обычно вы можете установить каждый пакет Python (и его зависимости) с помощью easy_install <имя_пакета> (необязательно с определенным номером версии). Я бы порекомендовал вам использовать setuptools в качестве нашего основного метода распространения, потому что:

  • он работает на всех платформах
  • является предпочтительным способом для пакетов Python в целом
  • .rpm или .deb сценарии установки могут повторно использовать его части также
  • вы можете установить эти пакеты внутри virtualenv без необходимости использования привилегий root, без конфликтов с остальными установленными веб-приложениями на сервере

Хороший ресурс для чтения: Развертывание с распространением . Он ориентирован на Flask (еще один веб-фреймворк), но простая замена «Flask» на «Django» поможет:)

Другой инструмент Python, который отлично подходит для распространения и развертывания вещей, - это fabric , который вы можете использовать в дополнение к распространению (или без него, как хотите).С помощью Fabric вы можете, например, загрузить и установить свое приложение (включая зависимости) одновременно на N серверов, управлять несколькими серверами разработки, тестирования и производства и обновлять их все одновременно с помощью одной команды.

Эта статья может помочь вам начать работу с Fabric: Развертывание с помощью Fabric

И, кроме того, я бы также рекомендовал вам опубликовать свой репозиторий (или создать зеркало существующего) на github или bitbucket для людей, которые хотят получить последние исходные коды вручную и после этого установить приложение с помощью python setup.py install . Сценарий установки setup.py является частью дистрибутива, о котором я упоминал ранее.

3
ответ дан 6 December 2019 в 14:00
поделиться

Уже есть RPM для python 2.6 и django доступны - так что их, по крайней мере, (относительно) легко получить и установить через RPM. Для создания RPM для вашего проекта есть описание некоторых деталей с использованием Distutils , в котором подробно рассказывается о том, что вам нужно в файле спецификации и что вы вызываете, чтобы это произошло.

Также есть примечание о создании RPM из python в StackOverflow по адресу Создание Python RPM , в котором также есть несколько деталей.

По опыту, упаковка самого python как RPM - самая сложная задача, поэтому я определенно рекомендую воспользоваться тем, что уже есть. Для нескольких программ, в которых я видел это, у нас есть Makefile (да, старая школа), запускающий команду setup.py bdist_rpm на сервере непрерывной интеграции, делая RPM доступным в результате этой сборки и немедленно доступным на сервере CI-сервер.

2
ответ дан 6 December 2019 в 14:00
поделиться

Помимо всех обычных проблем, возникающих при упаковке кода Python, проекты Django имеют несколько других проблем, которые необходимо решать:

  • Игра с системными путями
  • Игра с системными средствами
  • Обработка переводов
  • Рандомизация секретного ключа

Мне пришлось решать эти проблемы для упаковки Transifex, и я рекомендую вам изучить различные биты, которые были установлены, чтобы заставить его работать:

  • Установка под /usr/share/
  • Использование execfile() для загрузки настроек из /etc/
  • Огромный обходной путь обработки перевода
  • Замена секретного ключа в пост-... скрипт установки
  • Все остальные кровавые изменения и подтасовки, которые были необходимы
5
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: