循环 rdepends Debian 软件包之间的依赖关系
Circular rdepends dependencies between Debian packages
我的印象是 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
安装的。这是功能还是错误?
主要是一个功能。
不可能有无环图:
大量的包,没有工具来解决依赖问题。
确实存在循环依赖。通过从头开始构建发行版,您会注意到它,例如现在 libc 需要一些外部程序(例如解析器),而这些程序需要 libc。解决它的一种方法是使用 essential
包:这些包构成一个包的核心,它们可以相互依赖。
将库从程序中分离出来,将二进制文件从体系结构中性文件中分离出来很方便(尤其是在数据量很大的情况下)。这可能会产生循环依赖:两个部分应该一起安装。
包关系变化和包变化。所以有时某些部分会被移到另一个包中。循环依赖隐藏了 API 提供者的内部移动。
等
因为 Debian 不仅仅是一个 "distribution",而是很多 "distributions"(例如 'contrib' 和 'non-free',还有 'security'、'backport', 'experimental' 等)[如 Packages.gz 列表],另外有时我们还包含外部(非 Debian)包,需要非循环依赖图可能很困难,或者它会阻塞 apt,没人想要那个。所以我觉得循环依赖还是一个"feature".
注意:有时周期只是 "optional"。所需的包之一是循环的,但不是所有的可能性。 'virtual packages' 使这变得更加困难。
我的印象是 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
安装的。这是功能还是错误?
主要是一个功能。
不可能有无环图:
大量的包,没有工具来解决依赖问题。
确实存在循环依赖。通过从头开始构建发行版,您会注意到它,例如现在 libc 需要一些外部程序(例如解析器),而这些程序需要 libc。解决它的一种方法是使用
essential
包:这些包构成一个包的核心,它们可以相互依赖。将库从程序中分离出来,将二进制文件从体系结构中性文件中分离出来很方便(尤其是在数据量很大的情况下)。这可能会产生循环依赖:两个部分应该一起安装。
包关系变化和包变化。所以有时某些部分会被移到另一个包中。循环依赖隐藏了 API 提供者的内部移动。
等
因为 Debian 不仅仅是一个 "distribution",而是很多 "distributions"(例如 'contrib' 和 'non-free',还有 'security'、'backport', 'experimental' 等)[如 Packages.gz 列表],另外有时我们还包含外部(非 Debian)包,需要非循环依赖图可能很困难,或者它会阻塞 apt,没人想要那个。所以我觉得循环依赖还是一个"feature".
注意:有时周期只是 "optional"。所需的包之一是循环的,但不是所有的可能性。 'virtual packages' 使这变得更加困难。