简体   繁体   中英

how can I create a debian package to distribute python modules without using distutils?

I'm getting myself thoroughly confused how to correctly package my python3 based application .

My application uses a Makefile to install stuff to the correct file locations eg

/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

I'm not using a python distutils setup.py type installation - just a straightforward sudo make install based method.

When I try to Debian package my rules are very straightforward:

#!/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"

My debian/control file "build-depends" is again straightword:

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

That works just fine - I can run debuild -us -uc and it creates my .deb and when I install via sudo dpkg -i myfoo-0.1_all.deb everything is installed in the correct file locations.

Except one small matter - each python module should be byte-compiled so that on installation there is a subfolder /usr/lib/rhythbox/plugins/foo/__pycache__ containing myfoo_module.pyc and myfoo_module2.pyc

Now I know I cannot byte-compile during the build process - Debian rules forbid having a .deb with byte-compiled modules. So somehow I need to get debhelper to work for me.

Looking at the Debian packaging guide they mention stuff like cdbs, distutils etc - any debhelper examples always use syntax like:

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

... but I'm not using a distutils setup.py to install my application.

So I'm must be missing something pretty obvious - any thoughts?

You don't need to use distutils or a setup.py to create a valid deb for a Python program; dh_python3 would just make things easier if you were using distutils. Since you're not, you should simply proceed as if you were using something other than Python.

Since I don't know exactly what your structure is, I can't describe the exact steps, but in general you should install the right files to the right places with dh_install and create appropriate maintainer scripts to do whatever work is necessary for byte-compiling (on install or update) and removing the byte-compiled files (on remove or purge). The maintainer scripts that dh_python3 produces may provide a good starting point (which you can probably find in most files matching /var/lib/dpkg/info/python3-*.postinst and .postrm on your system).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM