mac*_*mac 6 python packaging dependencies
我对包装完全陌生,所以如果我向有经验的包装工提出一些显而易见的问题,请原谅我......
我如何确保在我的包中正确提到了所有依赖项?
假设我的应用程序使用library-xyz
了默认未安装的 lib 。如果我构建包并将其安装在我的开发机器上,library-xyz
它将已经安装,因此 - 即使我没有将其作为依赖项提及 - 程序仍将正确运行。但是新安装 ubuntu 的另一个用户不会library-xyz
安装,程序可能会崩溃。
我现在正在测试的方法是具有新鲜的Ubuntu安装在虚拟机上运行和安装包有,但因为它似乎是一个常见的问题,我不知道是否有测试一种更好的方式,一些采用的同样的理念chroot
,但该- 而不是“切除”文件系统的部分将“切除”所有那些在干净的ubuntu安装中不是“默认”的已安装包。
我正在打包 python 程序。
该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)
归档时间: |
|
查看次数: |
459 次 |
最近记录: |