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

Chi*_*nex 2 arch-linux pacman

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

?? 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'
Run Code Online (Sandbox Code Playgroud)

这对我来说是错误的 - Pacman 不想破坏我想要删除的包的依赖关系。我在这里误解了什么,还是有办法告诉吃豆子这没问题?

And*_*mes 6

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-openjdkjre10-openjdk和其他几个包。

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

  • 通过指定参数告诉pacman删除avahi包和所有依赖于要删除的功能的包--cascade
    $ sudo pacman -R --cascade avahi
Run Code Online (Sandbox Code Playgroud)
  • pacman通过指定--nodeps参数两次告诉完全忽略依赖树:
    $ sudo pacman -R --nodeps --nodeps avahi
Run Code Online (Sandbox Code Playgroud)

参考: