例如原子文本编辑器。当我跑步时:
sudo apt-get install imagemagick # http://www.imagemagick.org/script/index.php
给出:
you might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies: virtualbox-5.0:i386 : Depends: psmisc:i386 but it is not going to be installed
所以,当我尝试时:
sudo apt-get -f install
我明白了
The following packages were automatically installed and are no longer required:
libgtkspell0 pidgin-data
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
psmisc:i386
The following packages will be REMOVED:
atom gconf2 psmisc
The following NEW packages will be installed:
psmisc:i386
我的问题是:为什么要原子当我尝试安装完全不同的东西时被卸载?
编辑:重复该过程,但
apt-get autoremove
代替
sudo apt-get -f install
解决了这个问题。
但我仍然不明白为什么不需要的包应该触发删除我真正需要的包(原子)
答案1
发生这种情况是因为 apt 中的每个包都有一个依赖项列表,您可以通过以下方式查看:
apt-cache depends libgtkspell0 pidgin-data atom
为了保留软件包 apt 建议您删除atom,它具有与atom 的依赖项之一冲突的依赖项。特别注意:
Conflicts: libgtkspell0:i386
输出的一部分。
所以 apt 只是试图解决冲突。人们可能会注意到,几乎值得向两个要删除的软件包的打包程序发布问题,因为理论上 apt 应该提供删除不再需要的软件包,而不是系统中处于活动状态的软件包,但它始终是一个平衡包池中的依赖/冲突列表的创建和维护。
如果我猜的话,我猜 apt 内部实际上没有办法在创建依赖项列表时区分要删除的包和活动的包,所以它只是选择负面最少的结果(即强制删除一个包)结果。