有没有办法测试我为正确的依赖关系构建的包?

mac*_*mac 6 python packaging dependencies

我对包装完全陌生,所以如果我向有经验的包装工提出一些显而易见的问题,请原谅我......

我如何确保在我的包中正确提到了所有依赖项?

假设我的应用程序使用library-xyz了默认未安装的 lib 。如果我构建包并将其安装在我的开发机器上,library-xyz它将已经安装,因此 - 即使我没有将其作为依赖项提及 - 程序仍将正确运行。但是新安装 ubuntu 的另一个用户不会library-xyz安装,程序可能会崩溃。

我现在正在测试的方法是具有新鲜的Ubuntu安装在虚拟机上运行和安装包有,但因为它似乎是一个常见的问题,我不知道是否有测试一种更好的方式,一些采用的同样的理念chroot,但该- 而不是“切除”文件系统的部分将“切除”所有那些在干净的ubuntu安装中不是“默认”的已安装包。

我正在打包 python 程序。

Lek*_*eyn 3

lintian程序在使用构建包后运行debuild,并在构建二进制包时警告您缺少库。该ldd命令可用于检查包需要哪些库。

我使用以下脚本快速获取库包依赖项:

#!/bin/sh
# Save it as executable ~/bin/pkglibs
# Usage: pkglibs directory
#        pkglibs file
list_lib_pkgnames() {
    local lib="$1" libs
    # get the libraries for given "$lib", stripping out linker libraries
    libs=$(ldd "$lib" | awk '/=/{print $1}' | grep -vE '^(linux-vdso|linux-gate)\.so\.1$')
    # if there are libraries, find the matching packages for it
    [ -n "$libs" ] && dpkg -S $libs | sed 's/: .*//'
}
search="$1"
if [ -d "$search" ]; then
    # for directories, recursively search for library dependencies
    find "$search" -type f -exec "$0" {} \; | sort -u
else
    list_lib_pkgnames "$search"
fi
Run Code Online (Sandbox Code Playgroud)

对于大型目录,该命令可能需要一段时间,因为它单独测试每个文件。它可以优化为首先生成库列表,然后将唯一条目传递给命令dpkg -S,但这对读者来说是一个练习。

例子:pkglibs /usr/lib/mesa/

ia32-libs
lib32gcc1
lib32stdc++6
libc6
libc6-i386
libdrm2
libgcc1
libstdc++6
libx11-6
libxau6
libxcb1
libxdamage1
libxdmcp6
libxext6
libxfixes3
libxxf86vm1
Run Code Online (Sandbox Code Playgroud)

  • [`dh_python2`](http://manpages.ubuntu.com/manpages/natty/en/man1/dh_python2.1.html) 步骤可能就是您正在寻找的。检查包的依赖关系的另一种方法是运行 `grep -rn 'import ' path/to/your/python/files-or-dirs` 来检查所需的 python 模块。大多数 python 模块都以“python-”为前缀,例如“python-appindicator”。 (2认同)