如何检查依赖关系是否可满足

如何检查依赖关系是否可满足

我想使用脚本检查包的依赖关系是否可以满足。

我没有检查它是否已安装,只是检查它是否可安装。我没有尝试安装包。我也没有询问如何修复或解决依赖项问题。我只需要我的函数回答是或否。

例如:

somepackage (= 11.0.6-4)
anotherone (>> 1.1.2)
yetanother (>= 1.0.16)
andanother (>= 1:2.8.0)

对于第一个,我可以执行apt-get --simulate install somepackage=11.0.6-4并查看它是否失败。对于其他,apt-get 没有安装 >= 或严格 >> 的功能。

另外,如果我的 repos 中有类似的东西11.0.6-4ubuntu1或一些 PPA 字符串,该怎么办11.0.6-4ubuntu1~ubuntu20.04.1~ppa1?在我的测试中,即使 apt 接受它作为依赖项,等号也会失败。

对于其他的,我考虑使用apt-cache policy并检查该Candidate:行并进行数字比较。但是对于版本号 1:2.8.0 这样的版本,这将失败,因为实际版本是 2.8.0 而不是 1。此外,候选版本给出最新版本,但这可能并不总是所需的版本。

apt 也可能会说“这个包不可用,但这个包提供了它”或“安装包 1 而不是包 2”,这使得我的手动比较错误。

因此,我希望以与 APT 比较软件包和版本号的方式一致的方式执行此操作。我不希望我的手动比较出现误报或漏报。我可能会最终安装一些会导致系统崩溃的东西,或者另一方面,拒绝安装一些本来可以安装的东西。如果我可以利用 apt 系统本身来告诉我我的存储库是否满足所需的软件包和版本,那就更好了。

有些程序可以做到这一点,所以我认为我想要的是可行的。如果我在 gdebi 中打开一个 deb 包,它会告诉我是否存在无法满足的依赖关系。Gdebi 说Error: Dependency is not satisfiable: packagename (>= 1:2.8.0)。基本上我想做 gdebi 所做的事情。

相关内容