修复 Ubuntu 和其他 Linux 发行版中的“无法纠正问题,您持有损坏的软件包”错误

虽然在 Ubuntu 中有多种安装应用程序的方法,但我更喜欢在终端中使用 apt 命令来安装软件。

如果你这样做,你可能会遇到这样的依赖错误:

Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation:  The following packages have unmet dependencies:  green-recorder : Depends: python-urllib3 but it is not installable E: Unable to correct problems, you have held broken packages.

通常在 It’s FOSS 上,您会发现复杂问题的简单易行的解决方案。 不幸的是,这并不是那么简单。

在这篇故障排除文章中,我将告诉您发生此错误的原因,并就如何解决此问题提供一些指导。

为什么您会看到“您持有损坏的包裹”错误?

您正在尝试安装应用程序包,很可能来自 PPA 或第三方存储库。

应用程序通常需要特定版本的库和软件组件(称为依赖项)。 这些依赖项可能不是应用程序包本身的一部分,但预计它们要么已经安装在您的系统上,要么在安装应用程序期间安装。

您的 Linux 系统会尝试自行安装这些依赖项。 但是如果依赖包版本在你的系统上不可用,它就会感到困惑,因为它无法解决这个依赖问题。

这就是为什么它会通知您您尝试安装的软件依赖于 XYZ,但无法安装该 XYZ。

另一个用例是当您尝试安装同一软件的两个版本时,可以保留您的软件包。 假设您正在安装一个特定版本的 Wine,而您已经安装了另一个版本。

如何解决“无法纠正问题,您持有损坏的包裹”错误

你可以尝试一些事情来使事情发挥作用。 您需要对在 Linux 命令行中安装/删除软件包有一些想法才能在这里解决问题。

确保您系统的包缓存已更新

首先,确保本地包缓存已更新。 您的系统会检查此缓存中是否有可用的包。 缓存更新后系统可能会(但不确定)看到依赖包。

sudo apt update

再次尝试安装麻烦的软件包,看看它是否能解决问题。

安装依赖

如果您尝试再次安装麻烦的软件包,但它仍然抱怨相同的依赖项错误,因为该依赖项可能不适用于分发版本。

您可以使用 apt search 命令查看是否可以从其他包或名称中获取此库:

sudo apt search package_name

如果该软件包可用,它是否与您尝试安装的软件包要求的版本相同?

尝试安装依赖包,看看会发生什么:

sudo apt install dependency_package

您可能会遇到依赖链。 您尝试安装依赖项 A,但它抱怨 B。然后您尝试安装 B,它抱怨 C。

也可能发生这样的情况,当您尝试安装包 C 时,它已经安装了。 检查包C的版本,和包B要求的版本一样吗? 如果是,那么删除 C 并重新安装它可能会有所帮助。

你能从其他来源获得丢失的依赖包吗?

如果在你的系统上找不到缺失的依赖包(apt搜索没有结果),你可以尝试从其他地方获取依赖包。 我知道这不是很方便,但您在这里没有很多选择。

例如,在安装shutter 的情况下,它会抱怨libgoo-canvas-perl 并且该库在Ubuntu 系统上不再可用。

sudo apt install shutter Reading package lists... Done Building dependency tree        Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation:  The following packages have unmet dependencies:  shutter : Depends: libgoo-canvas-perl but it is not going to be installed E: Unable to correct problems, you have held broken packages.

但是,由于它在以前的 Ubuntu 版本中可用,我在 Ubuntu 的软件包存档中查找了该软件包,并在 Ubuntu 14.04 的列表下找到了它 这里. 我下载了 .DEB 文件并安装了它。

现在安装了这个依赖包,尝试安装原始应用程序(在这种情况下是快门)应该不会再抱怨至少这个包了。

如果在任何地方都找不到依赖包,请从其他来源安装麻烦的包

因此,在上面的示例中,我尝试使用其 PPA 安装 Green Recorder 应用程序。 此应用程序需要 python-urllib3 库,但不幸的是,这个库在我的 Ubuntu 20.04 系统中不可用。

[email protected]:~$ apt search python-urllib3 Sorting... Done Full Text Search... Done

显然,这是一个打包得很差的应用程序。 开发人员在没有意识到 Ubuntu 20.04 不再支持 Python 2 并且所有 Python 库现在都以 python3 前缀开头的情况下使其可用于 Ubuntu 20.04。 所以python-urllib3应该是python3-urllib3。

如果您遇到这种情况,请查看项目主页或在 Internet 上搜索其他安装源。 也许有一个 Snap/Flatpak 版本或者一些用户为它创建了一个 PPA? 如果不出意外,您也可以使用源代码选项。

如果您在更新期间看到保留的损坏包错误,请尝试此操作

到目前为止的大部分讨论都假设您在安装新应用程序时看到此错误。 情况可能并非总是如此。

如果您在尝试更新系统时看到此错误 sudo apt update 命令,那么您将不得不采用稍微不同的方法。

首先,使用此命令检查正在保存哪个包:

dpkg --get-selections | grep hold

如果您看到一些软件包被保留,请将它们删除,然后继续更新您的系统或安装软件。

您还可以使用 Synaptic 包管理器来修复损坏的包。

你设法解决了这个问题吗?

正如我之前提到的,这个问题没有直接的解决方法。 你必须自己调查,看看它是否可以修复。

如果您的问题得到解决,请在评论中分享。 如果没有,我可能会尝试帮助您。