У меня есть несколько приложений на основе python, состоящих из скриптов/модулей, которые должны быть упакованы и развернуты как RPM.Распространение пакета python вместе с зависимостями модулей с использованием RPM
Более сложный бит заключается в том, что каждое приложение должно быть распределено вместе со всеми зависимостями модуля python, и их следует использовать в предпочтении всем, которые установлены в системе.
Целевые узлы для некоторых из этих RPM имеют ограниченный сетевой доступ, поэтому RPM должны содержать все необходимое для запуска приложения, а не загружать что-либо во время развертывания.
Я рассмотрел упаковку и распространение virtualenv, но перемещение виртуального файла, похоже, не поддерживается.
Я просмотрел zc.buildout, но обнаружил, что документации не хватает. Я мог видеть, как загружать зависимости во время разработки, но не как распространять их как часть более крупного приложения. Возможно, для разных приложений требуются разные версии одного и того же модуля, поэтому их не следует устанавливать в системе.
Еще одна болевая точка заключается в том, что любые скрипты python в приложении должны быть изменены, чтобы использовать другой sys.path во время разработки и после развертывания, я не видел очевидного способа обойти это.
Есть предложения по тому, как наилучшим образом достичь этого? Идеальное резюме рабочего процесса с точки разработчика зрения будет выглядеть так:
- источника загрузки приложения сценария
- выполнения для извлечения конкретных зависимостей модулей, если нет (возможно, с помощью pip)
- сценарий запуска, чтобы построить python и упаковать его и все загруженные зависимости в RPM
Окончательный RPM должен быть установлен и запускаться на хосте без сетевого доступа, и установлен только интерпретатор python.
Вы можете распространять автономный исполняемый файл python - упакованный в RPM? Вам нужен исходный код для пользователей? Если не смотрите здесь http://stackoverflow.com/questions/5458048/how-to-make-a-python-script-standalone-executable-to-run-without-any-dependency – Anshul
Я не использовал его, но [conda's] (http://www.continuum.io/blog/conda) предназначены для обработки таких случаев, как ваши. Ознакомьтесь с разделом «Роллинг собственных пакетов» по этой ссылке. –
Вы должны использовать патчи с пипами или «колесные домики» – ionelmc