当我尝试删除某些软件包时,出现此错误:
?? 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 不想破坏我想要删除的包的依赖关系。我在这里误解了什么,还是有办法告诉吃豆子这没问题?
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
Run Code Online (Sandbox Code Playgroud)
pacman
通过指定--nodeps
参数两次告诉完全忽略依赖树: $ sudo pacman -R --nodeps --nodeps avahi
Run Code Online (Sandbox Code Playgroud)
参考: