Добавить модуль из RPM в качестве требования

Итак, у меня есть этот проект со многими зависимостями, которые устанавливаются из pip и документируются в файле требований. txt Мне нужно добавить другую зависимость теперь, которая не существует в pip, и я имею ее как RPM в каком-то адресе. Каков самый Pythonic способ установить его как требование? Благодарю! Код будет работать на RHEL и Fedora

Ответ 1

В этом случае задача Pythonic - просто провалиться, если зависимость не может быть удовлетворена. Все в порядке, и ваши пользователи оценят полезную ошибку, если они не выполнили предпосылки для установки. Рассмотрите многочисленные пакеты Python там с зависимостями библиотеки C, чтобы они были правильно установлены и установлены. В вашем проекте все еще объявляйте все ваши зависимости Python в файлах "setup.py" и "requirements.txt", но в наборе инструментов Python нет ничего, что установит RPM для вас (и не обязательно!), Так что просто остановитесь там и дайте установке сбой, если RPM не был установлен.

Кроме того, вы можете рассмотреть возможность упаковки своего приложения Python в качестве RPM. У вас есть зависимости RPM, а ваша целевая платформа - Fedora/RHEL. Упаковывая приложение как RPM, вы можете объявлять зависимости от других RPM, которые автоматизируют установку этих необходимых пакетов. Беспокоитесь о том, чтобы быть Pythonic в фазе сборки вашего RPM, и использовать магию RPM для остальных.

Я рекомендую использовать инструменты управления конфигурацией (Puppet, Ansible и т.д.), так как они слишком усложнят ваш процесс сборки. Эти инструменты отлично подходят для их предполагаемого использования, но здесь это будет похоже на использование пушки для перемещения мухи.

Ответ 2

Обычным способом управления такими зависимостями является использование системы управления конфигурацией, например SaltStack - я лично рекомендую это, так как это написан на Python и может быть расширен с помощью модулей Python. Другие варианты включают Puppet, Chef или Ansible.

Используя систему управления конфигурацией, вы объявляете пакеты, конфигурационные файлы и службы для установки и настройки в целевой операционной системе. Затем вы запускаете агента, и он выполняет все тяжелые операции: копирование файлов, установка пакетов RPM и включение/выключение служб. Преимущества огромны: конфигурация вашей ОС описывается как код, вы всегда получаете прогнозируемые результаты и экономить время на будущих установках.

Обратите внимание, что использование CM представляет собой довольно крутую кривую обучения. Однако, когда вы обнимаете его вокруг, вы никогда не вернетесь к настройке ОС вручную.

Более простой подход может заключаться в том, чтобы обернуть необходимые команды в bash script, назвав что-то вроде install_dependencies.sh. Один из них должен запускать этот script как часть развертывания приложения, поэтому рекомендуется документировать процесс где-то.

Ответ 3

Поскольку мы обсуждаем варианты - я запишу один, который не обсуждался.

Докерные контейнеры.

Вы можете установить базовое изображение с требуемой ОС, а затем файл Docker будет устанавливать все необходимые вам зависимости. Он также может устанавливать требования для установки.

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