首页 > 解决方案 > 使用 pybuild 在非标准目录中为 Debian 打包 Python 库

问题描述

我想创建一个 Debian 软件包以在我的公司中使用。此类自定义包的默认策略是将它们安装在非标准目录中,即不在/usr.

我尝试尽可能多地使用 Debian 工具,但我找不到一种方法来告诉pybuild我将我的包安装在/opt/python-mypackage/mypackageversion.

这是实际rules文件:

#!/usr/bin/make -f
DH_VERBOSE = 1
export PYBUILD_NAME = mypackage-0.8.2
export PYBUILD_INSTALL_ARGS=--prefix=/opt/python-mypackage/0.8.2 --install-layout=deb

%:
    dh $@ --with python2,python3 --buildsystem=pybuild

打包过程的日志显示文件安装在/usr

(...)
running install_scripts
Installing mypackage script to /<<PKGBUILDDIR>>/debian/python-mypackage/usr/bin
I: pybuild base:170: /usr/bin/python3 setup.py install --root /<<PKGBUILDDIR>>/debian/python3-mypackage --prefix=/opt/python-mypackage/0.8.2 --install-layout=deb
running install
running build
running build_py
running install_lib
creating /<<PKGBUILDDIR>>/debian/python3-mypackage
creating /<<PKGBUILDDIR>>/debian/python3-mypackage/usr
creating /<<PKGBUILDDIR>>/debian/python3-mypackage/usr/lib
creating /<<PKGBUILDDIR>>/debian/python3-mypackage/usr/lib/python3.4
creating /<<PKGBUILDDIR>>/debian/python3-mypackage/usr/lib/python3.4/dist-packages
copying /<<PKGBUILDDIR>>/.pybuild/pythonX.Y_3.4/build/mypackage.py -> /<<PKGBUILDDIR>>/debian/python3-mypackage/usr/lib/python3.4/dist-packages
byte-compiling /<<PKGBUILDDIR>>/debian/python3-mypackage/usr/lib/python3.4/dist-packages/mypackage.py to mypackage.cpython-34.pyc
(...)

关于如何根据pybuild我的需要进行调整的任何想法(除了不使用pybuild)?

标签: debianpybuilder

解决方案


我找到的唯一解决方案是覆盖dh_install目标,从而产生以下rules文件:

#!/usr/bin/make -f
#DH_VERBOSE = 1
export PYBUILD_NAME = mypackage-0.8.2
MYPACKAGE_DIR = /opt/python-mypackage/0.8.2

%:
    dh $@ --with python2,python3 --buildsystem=pybuild

override_dh_install:
    dh_install

    mkdir -p $(CURDIR)/debian/python-mypackage-0.8.2$(MYPACKAGE_DIR)
    mv $(CURDIR)/debian/python-mypackage-0.8.2/usr/* $(CURDIR)/debian/python-mypackage-0.8.2$(MYPACKAGE_DIR)
    rmdir $(CURDIR)/debian/python-mypackage-0.8.2/usr

    mkdir -p $(CURDIR)/debian/python3-mypackage-0.8.2$(MYPACKAGE_DIR)
    mv $(CURDIR)/debian/python3-mypackage-0.8.2/usr/* $(CURDIR)/debian/python3-mypackage-0.8.2$(MYPACKAGE_DIR)
    rmdir $(CURDIR)/debian/python3-mypackage-0.8.2/usr

推荐阅读