如何识别具有冲突依赖项的包?

如何识别具有冲突依赖项的包?

执行时sudo apt upgrade我收到以下错误消息:

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libcurl4 : Conflicts: libcurl3 but 7.60.0-1 is to be installed
E: Broken packages

我理解这句话的意思是:

  • 你之前已经安装了依赖包X libcurl4(所以libcurl4已经安装了)。
  • 您的升级包括一个软件包 Y,该软件包对(版本 7.60.0-1)有新的依赖项libcurl3
  • libcurl3无法安装,因为它与libcurl4.

我使用 GNOME Packages 查看了需要 libcurl3 和 libcurl4 的软件包列表,但是列表很长并且无法缩小范围(具体来说,它们没有指示哪些软件包已经安装或哪些即将安装) )。

我尝试了 apt debug 但似乎没有添加任何信息:

$ sudo apt -o Debug::pkgProblemResolver=yes upgrade                                                                                                           
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Entering ResolveByKeep 10%
  Dependencies are not satisfied for libcurl4:amd64 < 7.60.0-2 @ii mK Ib >
Keeping package libcurl4:amd64
  Dependencies are not satisfied for libcurl4:amd64 < 7.60.0-2 @ii mK Ib >
Package libcurl4:amd64 libcurl4:amd64 Conflicts on libcurl3:amd64 < none -> 7.60.0-1 @un uN >
  Dependencies are not satisfied for libcurl4:amd64 < 7.60.0-2 @ii mK Ib >
  Dependencies are not satisfied for libcurl4:amd64 < 7.60.0-2 @ii mK Ib >
  Dependencies are not satisfied for libcurl4:amd64 < 7.60.0-2 @ii mK Ib >
Calculating upgrade... Done
<repeats previous error message>

如何识别包 X(现有包)和包 Y(新包或具有新依赖项的现有包)?

答案1

要识别在软件包升级期间导致冲突(或其他问题)的软件包,我发现最有用的方法是启用解析器的调试模式:

apt -o Debug::pkgProblemResolver=yes upgrade

这将向您显示解析器遇到的所有问题,以及导致其考虑有问题的依赖项的包。

答案2

添加到 @StephenKitt 优秀答案的另一个方法是安装和使用aptitude.

aptitude通常更聪明地管理包,并在出现冲突时特别提供帮助和建议替代方案。

apt其用法也与使用、、aptitude installaptitude update非常相似aptitude upgrade。如果您aptitude不带参数调用,它将调用文本菜单界面。

man aptitude

aptitude - 包管理器的高级接口

aptitude 是 Debian GNU/Linux 软件包系统的基于文本的界面。

它允许用户查看包列表并执行包管理任务,例如安装、升级和删除包。可以从可视界面或命令行执行操作。

欲了解更多详情,请参阅aptitude - 命令行参考

相关内容