以下软件包存在未满足的依赖关系!

我写这篇文章是因为我对在我的Ubuntu 14.04上安装PostgreSQL 9.3感到非常困惑。 首先,我需要它来进行Python/Django开发,但在尝试安装时遇到了问题。 现在我遇到了这个错误,让我感到非常疯狂:
The following packages have unmet dependencies:
postgresql-9.3 : Depends: postgresql-client-9.3 but it is not going to be installed
                 Depends: postgresql-common (>= 142~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

我在网上找到了一些解决方案(如何解决添加PPA后的未满足依赖关系问题?),并且我已经按照预防措施部分的步骤做了一切,因为我之前遇到了一些损坏的软件包问题,但是这个错误又出现了。
第二件事是我按照官方的PostgreSQL安装教程(http://www.postgresql.org/download/linux/ubuntu/)进行操作,我曾经有重复的软件源,但是我已经删除了它们,并添加了一个新的,但是仍然出现这个错误。

6个回答

您可以使用以下方式安装软件包。

请确保仓库源已经更新。

sudo apt-get update

安装软件包。
sudo apt-get install packagename

一旦软件包确定您有一些缺失的依赖项,运行以下命令来修复损坏或缺失的依赖项。
sudo apt-get install -f

如果您已经安装了该软件包,上述命令将只下载缺失的依赖项。

4谢谢,我以为它的意思是使用 sudo apt-get install -f packagename,但是还是出现了同样的错误。 - Charles Clayton
3这在python2.7-minimal中无法工作,出现错误。 - IgorGanapolsky
10无法工作:0 升级,0 新安装,0 移除,0 未升级 - JBSnorro
工作! Ubuntu 20 - wmora2
@JBSnorro 你找到解决办法了吗? - undefined

我知道我有点晚了,但以上的解决方案都对我无效。真正解决我的问题的是使用aptitude而不是apt-get。aptitude会提供解决问题的建议。
只需运行以下命令:
sudo apt-get install aptitude

sudo aptitude install <package-name>

aptitude会为您提供依赖关系的解决方案,例如:
The following actions will resolve these dependencies:

Keep the following packages at their current version:
1)     libyaml-dev [Not Installed]                        

Accept this solution? [Y/n/q/? (n)

The following actions will resolve these dependencies:

Downgrade the following packages:                                
1)     libyaml-0-2 [0.1.4-3ubuntu3.1 (now) -> 0.1.4-3ubuntu3 (trusty)]

Accept this solution? [Y/n/q/?] (Y)

如在此 帖子 中讨论。


5这个方法对我有效,而其他答案却没有。谢谢! - aniztar
3对我来说最重要的是aptitude愿意建议降级软件包,而apt则不会。这为我提供了一种解决方案,即从PPA中删除第三方软件包,并将其重置为Ubuntu原始版本,从而解决了所有依赖问题。 - Migwell
这对我有效,而其他方法却没有。现在只是好奇为什么这不是标准工具。它比简单地说“我不能”更加用户友好,因为没有解释原因。 - CodeMonkey
真是救命稻草 :) - Gogol
天才,谢谢 - Ahmed Shehatah

有时候需要修复的依赖关系与您尝试安装的程序无关。 在我的情况下,它出现了以下错误:

以下是未满足的依赖关系

shashlik:依赖于libc6-i386,但将不会安装

依赖于lib32gcc1,但将不会安装

依赖于lib32z1,但将不会安装

结果发现我曾经尝试安装一个叫做"Shashlik"的程序,但安装失败了。 所以我运行了下面的代码:

sudo apt-get --purge remove shashlik

我跑了起來:
sudo apt install autoconf

这似乎修复了错误,因为我的程序随后安装成功了。 我不确定第二个命令有多大帮助,但是我把它放在那里,以防解决方案需要它。

1你是怎么确定这是问题的呢? - kevinkayaks
冒着回复晚的风险,当我尝试安装软件包时,错误信息被提示给了我,我只需要仔细阅读错误信息即可。 - Joel Winterton

让我与其他人分享一下我安装postgresql-9.3的经验。首先,我为此奋斗了大约4/5天,最终成功了。
一切都因为我在第一篇帖子中分享的这些可恶的错误而出错了,我试图通过谷歌搜索发现其他人也遇到了类似的错误,或者在努力解决类似的问题。
长话短说,在这里有一个非常好的答案来解决未满足的软件包问题: 如何解决添加PPA后的未满足依赖关系? 我的错误是我创建了重复的仓库,而这个链接中的答案解决了这个问题,这个命令sudo apt-get install -f只会产生另一个错误,你必须手动操作,至少我是这样做的(阅读到“预防措施”部分,但你可以读到最后,这是一篇很棒的帖子)。

第二步,我从官方PostgreSQL页面上找到了这篇文章http://www.postgresql.org/message-id/20140327084212.GA12703@msgid.df7cb.de(这是人们在安装PostgreSQL时通常遇到的错误),这引导我前往
https://wiki.postgresql.org/wiki/Apt,这是将PostgreSQL软件包添加到您的系统的正确方法,请仔细阅读并按步骤操作。

第三步是根据@vembutech发布的一系列命令进行操作:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install postgresql-9.3 postgresql-contrib-9.3

首先,你必须找到出问题的软件包。假设你遇到了以下错误:
The following packages have unmet dependencies:
 libpython3.9 : Depends: libpython3.9-stdlib (= 3.9.5-3~20.04.1) but 3.9.4-1+bionic1 is to be installed

你需要手动删除损坏包的文件。

要获取文件列表,可以运行以下命令

sudo ls –l /var/lib/dpkg/info | grep -i libpython3.9-dev

libpython3.9-dev 替换为您自己的软件包名称。
输出
libpython3.9-dev:amd64.list
libpython3.9-dev:amd64.md5sums

现在,你可以丢弃这些文件。
sudo rm /var/lib/dpkg/info/python3.9-dev*

执行相同的操作来处理剩下的包。
完成后,你可以运行。
sudo apt --fix-broken install

这次上面的命令应该可以正常工作。

尝试通过以下命令安装。
sudo apt-get install postgresql-common=151.pgdg12.4+1

sudo apt-get install postgresql-9.3 postgresql-contrib-9.3

1E: 找不到版本为 '151.pgdg12.4+1' 的 'postgresql-common',再次出现错误... - copser
我成功做到了,我运行了第二个命令,最后我做到了,@vembutech <3 - copser