Pacman -R:删除循环依赖项上的包错误

Pacman -R:删除循环依赖项上的包错误

当我尝试删除某些软件包时,出现以下错误:

╰─ sudo pacman -R avahi               
[sudo] password for laith: 
checking dependencies...
error: failed to prepare transaction (could not satisfy dependencies)
:: geoclue: removing avahi breaks dependency 'avahi'
:: gvfs: removing avahi breaks dependency 'avahi'
:: libcups: removing avahi breaks dependency 'avahi'
:: libdmapsharing: removing avahi breaks dependency 'avahi'

这对我来说看起来是错误的 - Pacman 不想破坏我想要删除的包的依赖关系。我是否误解了这里的某些内容,或者有没有办法告诉 pacman 这是可以的?

答案1

Arch Linux 中的包通常会声明对其他包的依赖关系,因为一个包需要并由另一个包提供一个或多个功能,例如共享对象(名称后缀为 的文件.so)。这是依赖树的概念,对于许多其他 GNU/Linux 发行版来说很常见。

您遇到的错误并不表示循环依赖。pacman输出实际上是说您正在尝试删除四个包所依赖的功能。例如,该消息的gvfs: removing avahi breaks dependency 'avahi'意思是:

  • avahi软件包提供了该avahi功能。
  • 软件包gvfs取决于avahi功能。如果没有它, 提供的功能gvfs将无法正常工作。
  • 您尝试删除avahi软件包,该软件包是当前唯一提供该avahi功能的软件包。
  • 为了避免依赖关系树损坏,pacman阻止您删除avahi包。

通常,包名称与功能名称匹配,但也有一些例外。例如,beanshell软件包取决于java-runtime功能,该功能由jre8-openjdk,jre10-openjdk和其他几个包。

pacman发现潜在的依赖树中断时,您需要告诉包管理器如何处理它。我看到以下选项:

  • 通过指定参数告诉pacman删除avahi包以及依赖于要删除的功能的所有包--cascade
    $ sudo pacman -R --cascade avahi
  • 通过指定参数两次来完全pacman忽略依赖树:--nodeps
    $ sudo pacman -R --nodeps --nodeps avahi

参考:

相关内容