当前位置: 首页>>技术教程>>正文


“以下软件包已被禁用:”为什么以及如何解决它?

, ,

问题描述

我刚刚为GIMP的开发版本添加了PPA存储库,但出现此错误:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

为什么以及如何解决这个问题,以便我可以使用最新版本而不是现在使用的版本?

最佳解决方案

根据an article on debian-administration.org

If the dependencies have changed on one of the packages you have installed so that a new package must be installed to perform the upgrade then that will be listed as “kept-back”.

谨慎的解决方案:

谨慎的解决方案是运行sudo apt-get install <list of packages kept back>。在大多数情况下,这将为kept-back软件包提供成功升级所需的功能。

积极的解决方案:

更积极的解决方案是运行sudo apt-get dist-upgrade,这将强制安装这些新的依赖项。

dist-upgrade可能相当危险。 为什么使用apt-get升级代替apt-get dist-upgrade?它可能会删除软件包来解决复杂的依赖情况。与你不同,APT并不总是足够聪明,无法知道这些添加和删除是否会造成严重破坏。

因此,如果您发现自己处于”cautious solution”无法工作的地方,dist-upgrade可能会工作……但您可能更适合了解更多有关APT的内容,并通过在case-by-case基础上安装和删除软件包来解决依赖关系问题”by hand” 。

想想它就像修理一辆汽车……如果你有时间并且用扳手很方便,你可以通过阅读和自己修理来获得一些安心。如果你感觉幸运,可以和你的表弟dist-upgrade一起停车,希望她知道她的东西。

次佳解决方案

每当你从命令apt-get upgrade收到消息

The following packages have been kept back:

然后升级一个或全部kept-back软件包,而不进行分发升级(如果我没有记错的话,这就是dist-upgrade所做的)是发出命令:

apt-get install <list of packages kept back>

这将解决kept-back问题,并要求安装其他软件包等,正如其他答案所解释的那样。

第三种解决方案

apt-get dist-upgrade对于稳定的环境是危险的,

  1. 错误的source.list设置,你最终破坏Ubuntu的。

  2. 您可能会将整个应用程序升级到您不想要的版本。

用例:内核升级后退,你只是想升级内核,不想升级整个发行版。

更好的方式来处理后备包裹:

sudo aptitude

如果您保留了软件包,您应该在列表顶部看到可升级软件包。

  • 点击该列表中的+

  • 打g两次

  • 如果询问,请回答debconf的东西

  • 按返回继续

  • 按Q键

  • 按是

您的后备包已安装。

第四种方案

通常有两个原因可能会看到此消息。

如果升级程序(通过sudo apt-get upgrade)会导致软件包被添加或删除,那么程序将被阻止。在这种情况下,您可以使用sudo apt-get dist-upgrade,然后可以添加或删除其他程序。

这很常见,通常不是问题。偶尔(特别是在Ubuntu alpha版本中)dist-upgrade将提供删除很多其他程序,在这种情况下,您可能想要取消它。

如果程序依赖于不可用的程序包或版本,那么程序将被阻止。在这种情况下,你真的不能做任何事情,因为这个软件包基本上是可以卸载的。当程序包无序添加到存储库,重命名程序包或程序包停止提供虚拟程序包时,会发生这种情况。

第五种方案

为什么你不试试this Unix SE answer

sudo apt-get --with-new-pkgs upgrade

This allows new packages to be installed. It will let you know what packages would be installed and prompt you before actually doing the install.

apt命令共享此apt-get选项。

第六种方案

这些软件包很可能会被阻止,因为它们的安装会造成依赖性不一致。这可能发生是因为您正在使用活动开发中的档案,ppas,或者因为您使用的镜像没有完全更新。

在最后一种情况下,等待,依赖关系解决后,它将在下次安装。

编辑:

还有另一种可能性,如果包裹被阻塞或者被固定,包裹可能会被阻止。

第七种方案

你也可以尝试:

sudo aptitude safe-upgrade

它比full-upgrade(最初名为dist-upgrade)更安全,因为“软件包不会被删除,除非它们未被使用”。

来自man aptitude

safe-upgrade

Upgrades installed packages to their most recent version. Installed packages will not be removed unless they are unused /…/ Packages which are not currently installed may be installed to resolve dependencies unless the –no-new-installs command-line option is supplied.

第八种方案

这通常是因为软件包添加了依赖项,并且升级不希望在未经许可的情况下为您添加它。

如果你运行:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

然后,新版本应与其新的依赖关系一起安装。

第九种方案

这对我有效

sudo aptitude full-upgrade

第十种方案

我发现aptitude在升级软件包方面做得更好,如果版本略有不同的话。我有这样的情况:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

这使得apt-get阻止更新,但aptitude更新它就好了。我不确定使用哪种算法来确定程序包是否应该更新。我猜这两个版本是相同的,只是不同的’qualifier’。但无论如何,apt-get不会更新它,但aptitude会。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/15.html,未经允许,请勿转载。