вторник, 9 августа 2016 г.

python: Собираем свой пакет из pip версии

Зачастую в пакетах лежит нужная библиотека, но отставшая от нужной версии года так на 3-4. Или вообще доступная только в pip.
Самый простой вариант это использовать библиотеку из pip. К сожалению, у pip нет "собранных" версий, поэтому на хосте тогда нужен компилятор, что многим неприемлемо для "боевых" сред. И в целом это разумно.
Хороший выход - используем ноду для сборки и собираем там virtualenv с нужными пакетами. А потом итог оборачиваем в пакет (пишем спеку). Также это может быть докер, но опять же - туда нужен компилятор... И опять возвращаемся к virtualenv. Впрочем, для простых либ и единообразной среды достаточно скопировать нужные файлы в SOURCES и раскидать их по местам установщиком пакета, более сложные либы лучше пакетировать раздельно. Если уже есть такая же старая либа --  всё просто, качаем .src.rpm, правим .spec под новую версию, подкладываем архив с новыми исходниками, собираем.
А может быть, что за основу взять нечего... Тогда можно взять например python-pika, скопировать его spec и начать правки.
Нужно скачать архив нужной версии, для примера сделаем пакет для couchbase. Работаем от обычного пользователя, который будет заниматься сборкой

Качаем pika
$ cd ~
$ yumdownloader --source python-pika
$ yum install python-pika-*

Теперь у нас есть rpmbuild и спек файл. Узнаем, откуда качать исходники
$ pip install -vvv --upgrade couchbase |grep "Downloading"
Это нам даст путь к архиву.

$ cd rpmbuild/SOURCES
wget (здесь ставим линк, полученный выше)

$ cd ~/rpmbuild/SPECS
$ cp python-pika python-couchbase
и добавляем в начало
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
%{!?python_sitearch: %global python_sitearch  %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
Для noarch пакетов нужен python_sitelib, а для зависимых python_sitearch

Надо будет обновить пути, поправить секцию files итд, это в целом несложно, запускаем rpmbuild -ba python-couchbase.spec и смотрим.

В помощь может быть rpm --showrc и смотрим на всякие site
Также смотрим на опции сборки, пути итд
pip install -vvv --upgrade couchbase | more 

Комментариев нет:

Отправить комментарий