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

假设我有一个包列表:

foo libfoo bar baz quux 

假设foo需要libfoobar ,而baz需要quux

我想要一种方法来放入该列表,并获取此列表:

 foo baz 

即 – 我希望安装最小的软件包列表 – 在依赖项解析之后 – 导致安装整个软件包列表。

我创建了一个完全符合您要求的脚本: https : //gist.github.com/kotarou3/2b311fb7b79ae6b682246b32acf0b7e9

python3-aptpython3-networkx是依赖项。 它使用apt包缓存作为包信息的来源。

包名称本身每行输出一个到stdout,而关于它们的任何注释(例如它们是否是循环的一部分)都是stderr

例:

 $ ./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