apt安装的时候一直有依赖说没装

错误描述

昨天忘了为了修复什么问题,手贱点了 源更新-“Other Softwar”那里取消了很多东西。也不知道是不是这个原因,然后装 $ sudo apt install ros-kinetic-fetch-gazebo*的时候就报有个dependence package ros-kinetic-fetch-navigation没装,我就手动安装了一下,此时又说 ros-kinetic-map-sever没装。如此层层递进,一直报有依赖没装。这肯定是不行的。
我们可以看见,它说依赖不能装上的下面有一句报错:

E: Unable to correct problems, you have held broken packages.

搜到的方法

然后我在网上搜到的解决方法总结起来大概是这几个:
参考:
https://appuals.com/fix-unable-correct-problems-held-broken-packages/
https://unix.stackexchange.com/questions/389156/how-to-fix-held-broken-packages
https://askubuntu.com/questions/363200/e-unable-to-correct-problems-you-have-held-broken-packages

方法一:apt修复
sudo dpkg --configure -a
sudo apt-get install -f
sudo apt-get clean && sudo apt-get update
sudo apt-get upgrade
sudo apt-get purge <package>
sudo apt-get autoremove

upgrade 那里,如果它报某些包 "held back", 则用 sudo apt-get dist-upgrade
我不仅运行完上面所有步骤,而且还鼓起勇气 sudo apt-get remove ros-kinetic-*,然后打算重装,没用的,发现连 sudo apt-get install ros-kinetic-ros-base 都报同样的错误(依赖不能装)。

方法二:用 aptitude 装
sudo aptitude install <package>

ros-kinetic-ros-base 倒是装上了,可是再用apt-get装ros包还是会有同样的问题。所以我干脆卸载了 ros-kinetic-ros-base 继续寻求其它解决办法。

方法三:用 Synaptic来修复损坏包

就是先 sudo apt install synaptic,然后打开这个软件Synaptic。在里面先搜索找到损坏的包,然后点菜单Edit->Fix Broken Packages 那里就可以修复。我试了不行,还报错(日志显示):

“Unable to correct problems, you have held broken packages”。

问题的最终解决

由于上述方法都不行,最后我参考:
https://askubuntu.com/questions/223237/unable-to-correct-problems-you-have-held-broken-packages
我就是跟提问者一样,用方法1修复的时候就说

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

也就是说没有依赖被安装咯。
然后根据第一个回答者的建议用以下命令查看held package的时候是没有输出的,即:

dpkg --get-selections | grep hold

和尝试

$ apt-mark showhold

的时候输出都是空。
也就是说我这可能就没有held package吧?
然后下面有个回答者 @krael 真正解决了我的问题
也就是手动修复损坏的包。以下是作者给的命令:

ls -l /var/lib/dpkg/info | grep <package>
cd /tmp && sudo mkdir new
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值