我认为Debian软件包之间的depends
/ rdepends
关系构成了有向无环图(DAG)。
但是,我刚刚遇到两个包之间的这些对称rdepends
依赖关系:
apt-cache rdepends libwww-perl # includes libsoap-lite-perl
apt-cache rdepends libsoap-lite-perl # includes libwww-perl
这两个软件包都是从stretch/main
安装的。这是一个功能还是一个错误?
答案 0 :(得分:1)
这主要是一个功能。
不可能有一个非循环图:
包含大量软件包,没有工具可以提供有关依赖项问题的建议。
确实存在循环依赖关系。通过从头开始构建分发,您会注意到它,例如现在 libc 需要一些外部程序(例如解析程序),此类程序需要 libc 。解决这个问题的一种方法是使用essential
软件包:这些软件包构建了一个软件包核心,它们可能相互依赖。
将程序库和二进制文件分开构建中性文件(特别是如果数据很大)是很方便的。这可能会产生循环依赖:两个部分应该一起安装。
包关系更改和包更改。所以有时某些部分会被移到另一个包中。循环依赖隐藏了API提供程序的内部移动。
等
因为Debian不仅仅是一个“发行版”,而是许多“发行版”(例如'contrib'和'non-free',还有'security','backport','experimental'等)[作为包.gz列表],另外有时候我们还包括外部(非Debian)包,要求非循环依赖图可能很困难,或者只是它会阻止 apt ,没有人想要它。所以我认为循环依赖仍然是一个“特征”。
注意:有时候这些周期只是“可选的”。其中一个必需的包是循环的,但不是所有的可能性。 “虚拟套餐”使这更加困难。