错误,pkgProblemResolver::Resolve生成了中断,这可能是由于保留的软件包引起的。

我不确定是什么导致了这个错误,但以下是完整错误信息,而且此错误作为通知呈现,使得我无法使用“更新管理器”更新任何软件 - 请提供一些帮助或告诉我如何弄清楚应该怎么修复它。

Could not calculate the upgrade

An unresolvable problem occurred while calculating the upgrade.

Please report this bug against the 'update-manager' package and include the following error message:
'E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.'

为什么不检查下面的输出呢?apt-mark showhold 如果依赖关系被保留,你将永远无法升级。 - Raghaha
6个回答

这篇帖子可能解决了你的问题。总结一下:

  1. 在文本编辑器中打开 /var/log/dist-upgrade/apt.log 日志文件。
  2. 找到任何 "broken" 包并使用 sudo apt-get remove <package> 删除它们。

注意:在较新的版本中,日志位于 /var/log/apt/term.log 中。


2+1。完美运行。在我的情况下,我只是尝试使用apt-get remove命令删除一个单独的软件包,结果它指示还需要删除依赖于它的其他软件包。这些软件包是特定于发行版的,并且它们的升级路径对Ubuntu来说是未知的。 - IsaacS
18cat: /var/log/dist-upgrade/apt.log: No such file or directory - Braden Best
我试过了。我找到了“这可能意味着您的安装有问题”的文字,但不知道它指的是哪个软件包... - Scorb
1@ScottFlog 在 /term.log 中查看并尝试确定它试图安装的内容。 - Pykler
那么接下来该怎么办呢?再次运行do-release-upgrade吗?现在它告诉我“请在升级之前安装所有可用的更新。” - Albert
在我的情况下,apt-get remove XXX 没有起作用,因为它显示了相同的 pkgProblemResolver 错误。然而,dpkg --purge XXX 可以卸载某些软件包,或者可能会显示其他我也需要卸载的软件包,然后才能起作用。 - Albert
1对我来说没有起作用。我似乎没有损坏的软件包。我的文件在/var/log/apt/term.log中。 - desmond13
不可能的,其中一些是依赖于基本系统包的。而且这需要太长时间了。 - tribbloid

尝试:

sudo apt-get update && sudo apt-get upgrade

然后再次运行update-manager。


2对我来说没有起作用 - desmond13
这个不起作用,因为我的安装被中断了,而且仓库也出问题了。现在我运行update命令时会收到错误提示。 - Jay Imerman

我在从16.04升级到18.04的过程中遇到了这个错误,并且在中途断电了。
这就是错误的样子,apt-get install -f也无法修复它。
$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
 gir1.2-gtk-3.0 : Depends: gir1.2-pango-1.0 (>= 1.40.5) but 1.38.1-1 is installed
                  Depends: libgtk-3-0 (>= 3.22.29) but 3.18.9-1ubuntu3.3 is installed
 hplip : Depends: hplip-data (= 3.17.10+repack0-5) but 3.16.3+repack0-1 is installed
         Depends: printer-driver-hpcups (= 3.17.10+repack0-5) but 3.16.3+repack0-1 is installed
         Depends: libsane1 (>= 1.0.24) but it is not installed
 libhpmud0 : Depends: libsnmp30 (>= 5.7.3+dfsg-1.8ubuntu3~dfsg) but 5.7.3+dfsg-1ubuntu4.2 is installed
 onboard : Depends: onboard-common (< 1.4.1-2ubuntu1.1) but it is not installed
           Depends: onboard-common (>= 1.4.1-2ubuntu1) but it is not installed
           Depends: libhunspell-1.6-0 but it is not installed
           Recommends: onboard-data (>= 1.4.1-2ubuntu1) but 1.2.0-0ubuntu5 is installed
 python3 : Depends: python3.6 (>= 3.6.7-1~) but it is not installed
           Depends: libpython3-stdlib (= 3.6.7-1~18.04) but 3.5.1-3 is installed
 python3-apt : Depends: libapt-inst2.0 (>= 1.6.5~) but 1.2.29ubuntu0.1 is installed
               Depends: libapt-pkg5.0 (>= 1.6.5~) but 1.2.29ubuntu0.1 is installed
 python3-cryptography : Depends: python3-asn1crypto (>= 0.21.0~) but it is not installed
                        Depends: python3-idna (>= 2.1) but 2.0-3 is installed
 python3-gdbm : Depends: libgdbm5 (>= 1.14) but it is not installed
 python3-pil : Depends: libwebp6 (>= 0.5.1) but it is not installed
               Depends: libwebpdemux2 (>= 0.5.1) but it is not installed
               Depends: libwebpmux3 (>= 0.6.1-2) but it is not installed
               Recommends: python3-olefile but it is not installed
 python3-systemd : Depends: libsystemd0 (>= 233) but 229-4ubuntu21.16 is installed
 python3-uno : Depends: libreoffice-core (= 1:6.0.7-0ubuntu0.18.04.2) but 1:5.1.6~rc2-0ubuntu1~xenial6 is installed
               Depends: python3.6 but it is not installed
               Depends: uno-libs3 (>= 5.3.0~alpha) but 5.1.6~rc2-0ubuntu1~xenial6 is installed
 python3.6-dev : Depends: python3.6 (= 3.6.7-1~18.04) but it is not installed
 totem-plugins : Depends: libgtk-3-0 (>= 3.19.4) but 3.18.9-1ubuntu3.3 is installed
                 Depends: liblirc-client0 but it is not installed
                 Depends: libtotem0 (>= 3.26.0-0ubuntu6.2) but 3.18.1-1ubuntu4 is installed
                 Depends: totem (= 3.26.0-0ubuntu6.2) but 3.18.1-1ubuntu4 is installed
                 Depends: gir1.2-totem-1.0 (= 3.26.0-0ubuntu6.2) but 3.18.1-1ubuntu4 is installed
 virtualbox : Depends: python3.6 but it is not installed
              Depends: libgsoap-2.8.60 but it is not installed
              Depends: libpng16-16 (>= 1.6.2-1) but it is not installed
              Recommends: libqt5core5a (>= 5.9.0~beta) but 5.5.1+dfsg-16ubuntu7.5 is installed
 virtualbox-qt : Depends: libqt5core5a (>= 5.9.0~beta) but 5.5.1+dfsg-16ubuntu7.5 is installed
                 Depends: libqt5widgets5 (>= 5.7.0) but 5.5.1+dfsg-16ubuntu7.5 is installed
                 Depends: libqt5x11extras5 (>= 5.6.0) but 5.5.1-3build1 is installed
E: Unmet dependencies. Try using -f.

我也尝试了在/var/log/dist-upgrade/apt.log中使用sudo apt-get remove命令来移除软件包,但是这个方法也没有起作用。
以下方法对我有效。
dpkg -l | grep ^iU | awk '{print $2}' | xargs sudo dpkg --purge 

它移除了损坏的软件包,然后我运行了。
 sudo apt install -f


它下载并安装了软件包。

你可以在dist-upgrade后面加上-f。但是在我的情况下,这会导致pkgProblemResolver错误。另外,使用相同的pkgProblemResolver错误时,apt-get remove也无法正常工作。不过,dpkg --purge部分地起作用了。有时它会列出其他包作为依赖项,我只需以同样的方式将其删除即可。最后,apt-get dist-upgrade -f运行良好。 - Albert
dpkg:错误:--purge 需要至少一个软件包名称参数。 - tribbloid
我本来对这个帖子抱有很高的期望,希望能找到一个答案。然而,我尝试过的所有方法都失败了,包括这个。最终让我成功的是终端上收到的一条回复,它告诉我运行 apt --fix-broken install - 这修复了所有已安装的组件并恢复了仓库列表。希望这对其他人有所帮助! - Jay Imerman

对我来说,这个问题看起来是这样的。
The following packages have unmet dependencies.
libglib2.0-dev : Depends: libglib2.0-0 (= 2.64.2-1~fakesync1) but 2.64.3-1~ubuntu20.04.1 is to be installed
                 Depends: libglib2.0-bin (= 2.64.2-1~fakesync1)

这是由于我选择了错误的更新类型导致的。我通过打开“软件和更新”,选择“更新”,并确保我已经选择了“所有更新”来解决了这个问题,以供其他软件包订阅。请参考下面的图片。

enter image description here

我接着运行常规的apt update && apt dist-upgrade,然后我就能安装那个库了。

谢谢!救了我的一天! - Jan D.M.

我昨天遇到了这个问题,因为有人在操作系统版本升级期间重新启动了。由于混乱的规模非常大(约1500个软件包),上述的任何方法都无法解决。
为了恢复,我进入了/var/log/apt/history.log,并查看了最后一条记录,其中包含了三个非常长的列表,描述了在操作系统升级失败时正在尝试的操作。它由三个列表组成:“升级:”、“安装:”、“删除:”,格式如下:
Upgrade: package1:arch (old, new), package2:arch (old, new),
...

把这三个列表带到你最喜欢的正则表达式兼容编辑器中,用换行符替换括号到逗号之间的内容。对于“Remove:”部分,在末尾添加一个“-”,这样你就得到了类似以下的列表:
Install:
speech-dispatcher-espeak-ng:amd64
fdisk:amd64
libgoa-backend-1.0-1:amd64
...

Upgrade:
speech-dispatcher-audio-plugins:amd64
ubuntu-settings:amd64
libmpc3:amd64
...

Remove:
qtdeclarative5-ubuntu-ui-toolkit-plugin:amd64-
python-sip:amd64-
gstreamer1.0-plugins-ugly-amr:amd64-
...

"-" 是一个关键的教训,因为除非你告诉它同时安装和移除,否则你将无法解决许多依赖循环的问题。
保留这个文件的副本以供以后参考,但是制作一份新副本并整理它:删除文件中的所有额外行,只保留 package:arch 行。
使用生成的文件 packages.txt 运行 apt 命令,如下所示。
xargs -a packages.txt sudo apt install

这个命令将包含系统在出现故障之前打算执行的所有添加/删除操作,并应该代表一个一致的集合。
假设它完成了,你可以使用sudo apt install -fsudo apt dist-upgrade来完成任何被忽略的内容。
最后,通过创建一个只包含“Install:”列表的新列表,将它们传递给apt-mark auto来将这些软件包标记为自动安装(升级选择了它们,而不是你)。
xargs -a installed.txt sudo apt-mark auto

希望这能帮助到其他有人觉得整个系统都出问题的人。

这是唯一对我有效的解决方案,谢谢!我不得不取消升级到bullseye,但无法继续进行。 - Jakob
1为了避免将来访问者在正则表达式上花费太多时间:\([^)]+\),应该匹配(在该字符串前后添加空格),然后替换为\n - geerlingguy
哇,这太棒了!救了我的一天!需要额外的努力,用一些简单的Python脚本来替换换行符,因为在nano中无法正常工作,但这个方法对我有效。 - adadion

这个错误可能是由于安装包不完整引起的。
你有两个选择,1)修复损坏的安装,或者2)回滚(或删除)损坏的安装。
由于上面没有提到,要回滚和删除损坏的安装,请退出Synaptic(如果你还在其中),然后在终端中输入以下命令:
sudo apt-get update       # Make sure your package list is up to date
sudo apt-get autoremove   # Removes "no longer required" packages

然后,为了确认已经清除了损坏的软件包,请返回到Synaptic并选择“编辑” | “修复损坏的软件包”,这样就不会有损坏的软件包了。
请注意,这并不能修复损坏的安装,它只是允许您在Synaptic中继续进行其他安装或卸载等操作。
发生的情况是您开始了一个软件包安装过程,然后在部分安装完成之后,出现了一些问题,导致未使用的依赖软件包和不完整的安装。