1

我的印象是depends/ rdependsDebian 软件包之间的关系构成了有向无环图 (DAG)。

但是,我刚刚遇到了rdepends两个包之间的这些对称依赖关系:

apt-cache rdepends libwww-perl        # includes libsoap-lite-perl
apt-cache rdepends libsoap-lite-perl  # includes libwww-perl

这两个软件包都是从stretch/main. 这是功能还是错误?

4

1 回答 1

2

它主要是一个功能。

不可能有无环图:

  • 大量的软件包,并且没有工具可以就依赖问题提供建议。

  • 确实存在循环依赖。通过从头开始构建发行版,您会注意到它,例如,现在libc需要一些外部程序(例如解析器),而这些程序需要libc。解决这个问题的一种方法是使用essential包:它们构成了包的核心,它们可以相互依赖。

  • 将库与程序分开,将二进制文件与体系结构中性文件分开是很方便的(尤其是在数据很大的情况下)。这可能会产生循环依赖:两个部分应该安装在一起。

  • 包关系更改和包更改。所以有时某些部分被移动到另一个包中。循环依赖隐藏了 API 提供者的内部移动。

  • 等等

因为 Debian 不仅仅是一个单一的“发行版”,而是许多“发行版”(例如“contrib”和“non-free”,还有“security”、“backport”、“experimental”等)[如 Packages.gz 列表],另外有时我们还包括外部(非 Debian)包,需要一个非循环依赖图可能很困难,或者它会阻止apt,没有人想要那样。所以我认为循环依赖仍然是一个“特性”。

注意:有时循环只是“可选”的。所需的软件包之一是循环的,但不是所有的可能性。“虚拟包”使这变得更加困难。

于 2018-05-02T16:28:36.473 回答