我对如何正确打包基于 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.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 来安装我的应用程序。
所以我一定错过了一些非常明显的东西——有什么想法吗?