![Pacman -R:删除循环依赖项上的包错误](https://linux22.com/image/150875/Pacman%20-R%EF%BC%9A%E5%88%A0%E9%99%A4%E5%BE%AA%E7%8E%AF%E4%BE%9D%E8%B5%96%E9%A1%B9%E4%B8%8A%E7%9A%84%E5%8C%85%E9%94%99%E8%AF%AF.png)
当我尝试删除某些软件包时,出现以下错误:
╰─ 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
参考: