如何在deb软件包列表中找到顶级依赖项?

假设我有一个包裹列表:
foo
libfoo
bar
baz
quux

假设 foo 需要 libfoobar,而 baz 需要 quux
我希望有一种方法可以将这个列表输入,并得到以下列表:
foo
baz

即,我想要安装最小的软件包列表。经过依赖关系解析后,能够导致整个软件包列表被安装。

apt-cache depends <packagename> 显示了该软件包及其依赖项。 - Avinash Raj
希望这对你有所帮助 dmd http://askubuntu.com/questions/128524/how-to-list-package-dependees-reverse-dependencies - Raja G
初步的清单是我前任安装了一堆我们产品所需的软件包的结果,然后给了我一个基于Ubuntu装机完毕和他进行这些软件包安装后的差异列表。他现在已经不记得具体选择了哪些软件包。 - Daniel
这对于备份和/或升级Ubuntu非常有用,尤其是当你想要修剪软件包时。谢谢! - Chris Watts
2个回答

我创建了一个脚本,完全符合你的要求:https://gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9 依赖项是python3-aptpython3-networkx。它使用apt软件包缓存作为软件包信息的来源。
软件包名称会逐行输出到标准输出,而有关它们的任何注释(例如是否属于循环)会输出到标准错误流。
示例:
$ ./find-top-level-packages.py nginx nginx-core zlib1g firefox
firefox
nginx
$ ./find-top-level-package.py -h
usage: find-top-level-packages.py [-h] [--root-dir dir]
                                  [--follow-unspecified-packages]
                                  [--no-use-recommends]
                                  [--show-missing-recommends]
                                  [package [package ...]]

Find top-level packages of the dependency graph

positional arguments:
  package               package names to use (default: all installed packages)

optional arguments:
  -h, --help            show this help message and exit
  --root-dir dir        act as if chrooted in the specified directory
  --follow-unspecified-packages
                        follow dependencies of packages not part of the
                        initial input
  --no-use-recommends   don't use recommended packages for the dependency
                        graph
  --show-missing-recommends
                        list missing recommended packages suffixed with a dash

我没有足够的声望来添加评论,所以只能写一个单独的回答。但这是对小太郎提供的答案的附加信息。
他的脚本非常好用。请确保安装正确版本的networkx才能正常运行。
sudo pip3 install networkx==1.11