1

我对如何正确打包基于 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”又是直言不讳:

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-豌豆-1.0,
               gir1.2-rb-3.0,
               gobject-introspection (>= 0.10.0),
               国际工具(> = 0.35.0),
               libglib2.0-dev,
               蟒蛇3

这很好用 - 我可以运行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 来安装我的应用程序。

所以我一定错过了一些非常明显的东西——有什么想法吗?

4

1 回答 1

0

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

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

于 2016-02-03T16:13:52.817 回答