在Ubuntu的使用中想必大家经常遇见这句话:“E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”
对于这个问题,网上有很多解决方案,但是大多不靠谱.以往我一般都是手动处理,如果是一个软件的版本问题,直接安装指定版本.比如:
在显示liblapack3 : 依赖: libgfortran3 (>= 4.6) 但是它将不会被安装
的时候,部分情况可以直接使用
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
sudo apt-get -f install libgfortran3>=4.6
,来进行解决.
但是如图中所示,这次不行,为什么呢?因为一般而言安装制定版本的软件所对应的问题是软件版本过高的的问题.但是在这里并不是这样,而是因为安装这个软件还有很多的其他依赖这里无法提供.
这个时候就要轮到下面的这种方法了.
那就是使用aptitude来代替apt,aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。而在安装软件时,它不仅仅可以提供像apt那样的普通功能,还能够提供在安装依赖冲突时的解决方案。
比如我在安装R时发现安装冲突,这个时候我们就可以使用sudo aptitude install r-base-core
来解决这个问题。一开始的时候,aptitude也会想apt那样检测到依赖冲突,然后给出一个解决方案。但是不同的地方在于对于解决方案你有三个选择(y/n/q),y就是同意,n不同意,然后会继续给出下一个解决方案。q–>退出,放弃安装。假如一开始它推荐给你不安装的时候,你就可以选择n,然后一般而言第二个解决方案将会自动降级安装依赖的软件(如果是一系列软件版本过高的话),这个时候选择同意基本都可以安装成功。
如图:
不过唯一美中不足的问题在于,这样安装之后的 软件版本会比较低。不过好在确实可以用了。