在Ubuntu的使用中想必大家经常遇见这句话:“E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”


对于这个问题,网上有很多解决方案,但是大多不靠谱.以往我一般都是手动处理 (当然我们也可以使用aptitude来自动解决安装依赖问题,详细见下文)
,如果是一个软件的版本问题,直接安装指定版本.比如:



在显示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,然后一般而言第二个解决方案将会自动降级安装依赖的软件(如果是一系列软件版本过高的话),这个时候选择同意基本都可以安装成功。

如图:


不过唯一美中不足的问题在于,这样安装之后的 软件版本会比较低。不过好在确实可以用了。



<>参考

* 在Ubuntu中安装R语言 <https://blog.csdn.net/wzgl__wh/article/details/53440607>
* Ubuntu解决包的依赖问题 <https://blog.csdn.net/newmann/article/details/70149021>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信