как я могу создать пакет debian для распространения модулей Python без использования distutils?

Я совершенно не понимаю, как правильно упаковать мое приложение на основе python3.

Мое приложение использует Makefile для установки файлов в нужные места, например.

/usr/lib/rhythmbox/plugins/foo/myfoo.plugin
/usr/lib/rhythmbox/plugins/foo/myfoo/po/translation.mo
/usr/lib/rhythmbox/plugins/foo/myfoo_module.py
/usr/lib/rhythmbox/plugins/foo/myfoo_module2.py

Я не использую установку типа python distutils setup.py - просто простой метод, основанный на sudo make install.

Когда я пытаюсь упаковать Debian, мои правила очень просты:

#!/usr/bin/make -f

%:
    dh $@ --parallel --with autoreconf,python3

override_dh_autoreconf:
    dh_autoreconf -- ./autogen.sh

override_dh_auto_configure:
    dh_auto_configure -- --libdir="\$${exec_prefix}/lib"

Мой файл debian / control "зависит от сборки" снова прост:

Build-Depends: debhelper (>= 9),
               dh-autoreconf,
               dh-python (>= 1.20130903),
               gir1.2-glib-2.0,
               gir1.2-gstreamer-1.0,
               gir1.2-gtk-3.0,
               gir1.2-peas-1.0,
               gir1.2-rb-3.0,
               gobject-introspection (>= 0.10.0),
               intltool (>= 0.35.0),
               libglib2.0-dev,
               python3

Это прекрасно работает - я могу запустить debuild -us -uc, и он создаст мой .deb, и когда я установлю через sudo dpkg -i myfoo-0.1_all.deb, все будет установлено в правильные места для файлов.

За исключением одной мелочи - каждый модуль python должен быть скомпилирован побайтно, чтобы при установке была вложенная папка /usr/lib/rhythbox/plugins/foo/__pycache__, содержащая myfoo_module.pyc и myfoo_module2.pyc

Теперь я знаю, что не могу выполнить байтовую компиляцию в процессе сборки - правила Debian запрещают иметь .deb с модулями, скомпилированными в байтах. Так что как-то мне нужно, чтобы debhelper работал на меня.

Глядя на руководство по упаковке Debian, они упоминают такие вещи, как cdbs, distutils и т. Д. - любые примеры debhelper всегда используют синтаксис как:

override_dh_auto_install:
        dh_auto_install
        python setup.py install --root=$(CURDIR)/debian/$(DEB_SOURCE) --install-layout=deb)

... но я не использую distutils setup.py для установки своего приложения.

Так что я, должно быть, упускаю что-то довольно очевидное - какие-нибудь мысли?


person fossfreedom    schedule 16.01.2016    source источник


Ответы (1)


Вам не нужно использовать distutils или setup.py для создания действительного deb для программы Python; dh_python3 упростил бы задачу, если бы вы использовали distutils. Поскольку это не так, вам следует просто продолжить, как если бы вы использовали что-то другое, кроме Python.

Поскольку я не знаю точно, какова ваша структура, я не могу описать точные шаги, но в целом вам следует установить нужные файлы в нужные места с помощью dh_install и создать соответствующие сценарии сопровождающего для выполнения любой работы, необходимой для байтовых- компиляция (при установке или обновлении) и удаление файлов с байтовой компиляцией (при удалении или очистке). Сценарии сопровождающего, которые создает dh_python3, могут стать хорошей отправной точкой (которую вы, вероятно, можете найти в большинстве файлов, соответствующих /var/lib/dpkg/info/python3-*.postinst и .postrm в вашей системе).

person the paul    schedule 03.02.2016