Подготовка 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: