如何创建一个debian包来分发python模块而不使用distutils?

时间:2016-01-16 11:03:31

标签: python debian package debhelper

我让自己彻底混淆了如何正确打包我的python3 based application

我的应用程序使用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"再次直言:

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.pycmyfoo_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来安装我的应用程序。

所以,我必须错过一些非常明显的东西 - 任何想法?

1 个答案:

答案 0 :(得分:0)

您不需要使用distutils或setup.py为Python程序创建有效的deb;如果你 使用distutils,dh_python3会让事情变得更容易。既然你没有,你就应该像使用Python以外的其他东西一样继续。

由于我不确切知道您的结构是什么,我无法描述确切的步骤,但一般情况下,您应该使用dh_install将正确的文件安装到正确的位置并创建相应的维护者脚本执行字节编译(安装或更新)和删除字节编译文件(删除或清除时​​)所需的任何工作。 dh_python3生成的维护者脚本可以提供一个很好的起点(您可以在系统上匹配/var/lib/dpkg/info/python3-*.postinst.postrm的大多数文件中找到这些起点。