it-swarm.cn

“以下包裹一直被拒之门外:”为什么以及如何解决?

我刚刚为GIMP的开发版本添加了一个PPA存储库,但是我收到了这个错误:

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

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

829
jfoucher

根据 关于debian-administration.org的文章

如果已安装的某个软件包上的依赖项已更改,则必须安装新软件包才能执行升级,然后将其列为“保留”。

谨慎解决方案1 ​​:

Per Pablo的答案 ,您可以运行Sudo apt-get --with-new-pkgs upgrade,它将安装保留的包。

这样做的好处是不会将保留的包裹标记为“手动安装”,这可能会迫使用户更多地干预(见注释)。

如果Pablo的解决方案适合您,请提升它。如果没有,请评论出错的地方。

谨慎解决方案2 :

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

积极的解决方案:

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

dist-upgrade可能非常危险与升级不同 它可以删除包来解决复杂的依赖情况。与您不同,APT并不总是足够聪明,无法知道这些添加和删除是否会造成严重破坏。

因此,如果您发现自己处于“谨慎解决方案”不起作用的地方,dist-upgrade可能可以工作......但是您可能更好地了解APT并通过逐个安装和删除软件包“手动”解决依赖性问题。

把它想象成一辆汽车...如果你有时间并且用扳手方便,你可以通过阅读和自己修理来获得一些安心。如果你感觉很幸运,可以和你的堂兄dist-upgrade一起放下车,希望她知道她的东西。

845
Michael Crenshaw

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

The following packages have been kept back:

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

apt-get install <list of packages kept back>

这将解决后退问题,并将要求安装其他软件包等,如其他答案所述。

488
user88285

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

  1. 错误的source.list设置,你最终破坏了ubuntu。
  2. 您可能会将整个应用程序升级到您不想要的版本。

使用案例:内核升级保留回来,你只想升级内核,不想升级整个发行版。

处理后备包装的更好方法:

Sudo aptitude

如果您保留了后备包,则应在列表顶部看到可升级包。

  • 点击该列表中的+
  • 击中g两次
  • 如果被问到,请回答debconf的问题
  • 按返回继续
  • 按Q.
  • 按是

你的后备包装好了。

173
mudy

为什么你不试试 这个Unix SE答案

Sudo apt-get --with-new-pkgs upgrade

这允许安装新包。它将告诉您将安装哪些软件包并在实际安装之前提示您。

apt命令友好替代apt-get)分享 这个apt-get选项

使用apt install <pkg>将pkg标记为“手动安装”!!再次将其标记为“自动安装”使用 apt-mark auto <pkg> (另请参见子命令showmanual)。更多信息 关于这个答案

128
Pablo Bianchi

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

如果升级程序(通过Sudo apt-get upgrade)将导致添加或删除程序包,则程序将被保留。在这种情况下,您可以使用Sudo apt-get dist-upgrade,然后可以添加或删除其他程序。

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

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

32
jbowtie

你也可以尝试:

Sudo aptitude safe-upgrade

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

来自man aptitude

安全升级

将已安装的软件包升级到最新版本。除非未使用/.../否则不会删除已安装的软件包。除非提供了--no-new-installs命令行选项,否则可以安装当前未安装的软件包以解决依赖关系。

23
Afilu

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

在最后一种情况下,只需等待,当依赖关系得到解决时,它将在下次安装。

编辑:

还有另一种可能性,如果对它们进行保持,或者它们被固定,则可能会阻止包裹。

20
txwikinger

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

如果您运行:

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

然后应该将新版本与其新依赖项一起安装。

9
John Lawrence Aspden

这对我有用

Sudo aptitude full-upgrade
8
Singh

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

[email protected]:/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更新了它就好了。我不确定使用哪种算法来确定是否应该更新包。我猜这两个版本的版本相同,只有不同的'限定符'。但无论如何,apt-get不会更新它,但aptitude会。

7
Alexander Torstling

发布新内核时遇到了这个问题。 (可能是因为我启用了不稳定的更新。)我发现安装的最简单方法是通过Ubuntu的图形安装程序(update-manager)。

3
Kazark

在我的情况下,保留的包是与linux-headers和内核相关的包。我通过尝试解决通知区域中有红色感叹号并且无法更新包的问题来实现此目的。

要解决这个问题,我不必同时使用dist-upgrade或手动apt-get install xxx

我所做的和已经帮助的是简单干净

Sudo apt-get update
Sudo apt-get autoremove
Sudo apt-get autoclean
Sudo apt-get upgrade

我不得不手动确认Grub更新及其配置。

然后我只是在计算机上工作了一段时间,然后标准更新对话框再次出现,最后包括内核和相关的“Ubuntu base”部分。更新执行没有任何麻烦,我不再看到任何阻止包。

此外,请记住,包括内核更新的* buntu更新对休眠敏感非常重要 - 我已经多次遇到此问题而且我总是通过以下方式解决问题重新启动机器并执行上述步骤。

那么也许这就够了?!

(这里描述的情况与我2015年12月底的Xubuntu 15.10有关)

3
crysman

我使用synaptic遇到了这个问题,因为它似乎挂了,并尝试解决这个问题,我重新启动并再次尝试。

然后我发现了一个信息性消息作为包的一部分,并为我提供了一些安装后的说明。

我必须点击“详细信息”,然后“q”在阅读完邮件后退出,然后事情正常进行。

2
Elliptical view

这看起来像是重新安装后备包的正确方法:

apt-get install --reinstall libjpeg-progs

在从Ubuntu 14.04升级到16.04后libjpeg-progs被卡住时,至少这对我有用。我相信你可以和任何其他后备应用程序一样,例如gimpname__。

资料来源: https://ubuntuforums.org/showthread.php?t=2321702&p=13476183#post1347618

2
Stephan Henningsen

实际上,您需要的开关是dselect-upgrade,它可以安装/删除所涉及的特定包集的依赖关系。

1
Johnny

我已阅读所有帖子,发现有许多有趣的解释。我正在尝试所有这些但完全没有任何结果。我有mysql-utilities的问题我无法升级。更新是由系统提出的。所以,我想展示一些步骤来做到这一点。当然,我会在某些时候重复所有上述帖子。这是我的错误,是的,我已经找到已经存在的帖子,但接下来该怎么办? enter image description here

下一步是:

Sudo apt-get --purge remove mysql-utilities

我们可以在下面的图像中看到结果。我删除包并通过命令检查:

Sudo apt-get -f install

结果 - 很好!后来我正确安装了这个新版本的软件包。 enter image description here

这样,我认为可以帮助更多新人,因为有了其他包,我们可以做同样的步骤。

有一次,我很抱歉,当我在某些地方重复其他帖子时。

0
Vasyl Lyashkevych