Подготовка deb-пакетов с модулями Python
В заметке Создание deb-пакетов для модулей Python была рассмотрена возможность сборки deb-пакетов с модулями для Python. В той заметке, однако, не учитывается, что один и тот же модуль может быть собран в двух вариантах: для Python 2.6 и для Python 3.
По умолчанию в файл debian/rules помещается заготовка, позволяющая собрать модуль для Python версии 2.6. Это становится понятно, если заглянуть вовнутрь файла и увидеть, что в нём имеется только одна секция Package, в которой указано имя пакета, начинающееся с префикса python-:
Package: python-clickhouse-cityhash
Нам нужно собрать также пакет с префиксом python3-. Перво-наперво скопируем эту секцию Package. В копии изменим префикс имени пакета на python3, вот так:
Package: python3-clickhouse-cityhash
Список зависимостей у обоих пакетов пока ещё одинаковый и выглядит следующим образом:
Depends: ${misc:Depends}, ${python:Depends}, ${shlibs:Depends}
Нужно исправить этот список у пакета для Python 3 следующим образом:
Depends: ${misc:Depends}, ${python3:Depends}, ${shlibs:Depends}
Если обратить внимание исходные тексты пакетов из официальных репозиториев, то можно заметить, что там зависимости имеют следующий вид:
Depends: python-pkg-resources, ${misc:Depends}, ${python:Depends}
Depends: python3-pkg-resources, ${misc:Depends}, ${python3:Depends}
Можно исправить список зависимостей таким же образом.
Теперь обратим внимание на сборочные зависимости исходного текста, которые по умолчанию выглядят примерно следующим образом:
Build-Depends:
dh-python,
python-setuptools (>= 0.6b3),
python-all-dev (>= 2.6.6-3),
debhelper (>= 9)
Исправим их следующим образом:
Build-Depends:
debhelper (>= 9),
dh-python,
python-all-dev (>= 2.6.6-3),
python-setuptools (>= 0.6b3),
python3-all-dev,
python3-setuptools
Если в процессе сборки система ругается на то, что был изменён двоичный файл и нужно поместить его в архив с исходными текстами, то имя такого файла можно поместить в файл debian/clean, чтобы таких вопросов больше не возникало и этот файл удалялся после сборки.
Также сборочная система при сборке пакетов с модулями для Python часто ругается на содержимое каталога .eggs, которое предлагает поместить в архив с исходными текстами модуля. Чтобы после сборки удалять этот каталог вместе со всем содержимым, можно вписать в файл debian/rules дополнительное правило (обратите внимание на отступы табуляциями):
override_dh_auto_clean:
dh_auto_clean -O--buildsystem=pybuild
rm -fR .eggs
Строчку с опциями dh_auto_clean можно взять из вывода системы сборки.
Если для полного тестирования кода требуется воссоздать тестовую среду или тесты просто по каким-то причинам не проходят, можно отключить тестирование, вписав в файл debian/rules пустое правило тестирования, вот так:
override_dh_auto_test: