当我尝试安装软件包时,apt 返回“E:未满足的依赖项”,我如何诊断问题并找出它发生的原因?

Bra*_*iam 0 apt software-installation

我正在尝试安装一个软件包,但apt-get由于未满足的依赖关系,软件包管理器(、软件中心等)拒绝安装它。

我尝试安装软件包是否会导致依赖关系问题?我怎么知道是什么问题?

Bra*_*iam 5

如果您正在安装特定的包/程序并且遇到依赖性问题,则有两个原因:

  • 你的依赖已经被破坏了。
  • 由于您当前的设置,无法安装您想要的软件包。

第一种情况很容易弄清楚。只需执行sudo apt-get check. 这将向您报告已安装软件包的任何问题,您将知道如何解决它们。

sudo apt-get check                          
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
 libpurple-dev : Depends: libpurple0 (>= 2.10.9) but it is not installed
                 Depends: libpurple0 (< 2.10.9+1~) but it is not installed
 pidgin : Depends: libpurple0 (>= 2.8.0) but it is not installed
 pidgin-whatsapp : Depends: libpurple0 (>= 2.8.0) but it is not installed
E: Unmet dependencies. Try using -f.
Run Code Online (Sandbox Code Playgroud)

通常,如果您没有使用 手动安装任何软件包dpkg、缺少镜像、损坏的 PPA 或不同版本存储库的混合(如 Debian 和 Ubuntu 或 Precise 和 Saucy),这可以通过一个简单的sudo apt-get -f install. 如果这不能解决它,您可能需要寻求帮助,添加您尝试的所有操作结果以及apt-cache policy所有相关包的输出:

apt-cache policy pidgin-whatsapp pidgin libpurple-dev libpurple0
Run Code Online (Sandbox Code Playgroud)

现在,如果结果是干净的并且依赖问题仅在您尝试安装软件包时发生,您可能需要知道为什么 apt 拒绝安装软件包。如果您想快速解决问题,这样做很累,并且会造成障碍,并且每个问题都有自己的解决方案。建议在这种情况下使用aptitude. 首先我们安装它:

sudo apt-get install aptitude
Run Code Online (Sandbox Code Playgroud)

现在您将询问 aptitude 为什么您不能使用以下方法安装该软件包:

aptitude why-not package
Run Code Online (Sandbox Code Playgroud)

它会向您显示一个不错的列表,告诉您无法安装该软件包的原因。它可能是一个丢失的包,这取决于一个不可用的包,或者其他一些有冲突/破坏它的包。例子:

aptitude why-not lsb-core:amd64
i   lsb-security Recommends lsb-core (>= 4.1+Debian12)
i A lsb-core     Conflicts  lsb-core:amd64
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我安装了 lsb-security 包,它安装了 lsb-core 32 位版本,但不允许我安装 64 位版本。