Управление пипсом в среде RPM

Для наших prod-приложений мы управляем всеми пакетами в RPM. В идеальном мире, единственном в мире, это прекрасно.

Однако каждый язык или структура в последнее время развертывают свои собственные менеджеры пакетов. Например, для python я почти всегда использую pip, а затем снова собираю пакеты для rpm при переходе на производство. То же самое относится к гамме или драгоценным камням.

Это проблема, с которой сталкиваются многие люди? Каков наилучший способ избежать всего этого? Люди справляются с этим, просто всасывая его и упаковывая все вручную, или есть какой-то автоматизированный способ их интеграции?

Мне хотелось бы услышать мысли об этом.

Ответ 1

Я использовал pyp2rpm для сборки пакета rpm для модуля rstr, и мне не нравятся случайные установки некоторых файлов через pip:

pyp2rpm -n rstr > ~/rpmbuild/SPECS/rstr.spec
rpmbuild -ba ~/rpmbuild/SPECS/rstr.spec

но я не знаю, достаточно ли это для вашего производства.

Ответ 2

Я предпочитаю устанавливать на другой sitelib, чем по умолчанию. Поэтому я:

$ pip install --user django

Вдали от идеала, не играет с dnf/rpm/yum, но в то же время не путается с вашими системными модулями. И вы можете стереть их, когда захотите.

Ответ 3

Вы можете установить fpm: https://github.com/jordansissel/fpm

Управление эффективными пакетами! Создавайте пакеты для нескольких платформ (deb, rpm и т.д.) С большой легкостью и здравомыслием. http://fpm.readthedocs.io/en/latest/

Далее вы можете запустить:

$ fpm -s python -t rpm pyramid
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"python-pyramid-1.9a2-1.noarch.rpm"}

-s тип источника
-t тип пакета для создания и в качестве последнего параметра имя пакета

https://fpm.readthedocs.io/en/latest/source/python.html