修复一半安装的软件包


42

使用sudo apt-get upgrade说明时出现错误:

dpkg: error processing libgfortran3:amd64 (--configure):
  package libgfortran3:amd64 is not ready for configuration
  cannot configure (current status `half-installed')
Errors were encountered while processing:
  libgfortran3:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

它似乎并没有阻止安装/升级其他应用程序。我认为出现此问题是由于在升级应用程序时直接关闭了PC。

我怎样才能解决这个问题?


Answers:


38
sudo dpkg --remove --force-remove-reinstreq --dry-run libgfortran3:amd64

那只是一个空想。我不确定移除libgfortran3会带来什么,但是运行并查看。假设它不会吞噬整个系统,请在不使用的情况下再次运行它--dry-run,然后可以sudo apt-get install ...将所需的软件包放回去。


4
工作了,谢谢!为了进行记录,我运行了它并说,dpkg: warning: package is in a very bad inconsistent state; you should reinstall it before attempting a removal所以我从packages.ubuntu.com手动下载了该软件包并运行了sudo dpkg -i WHERE/THE/DOWNLOADED/PACKAGE/IS。然后一切都变好了。
Bora M. Alper

1
在我的情况下,按照这些说明进行操作之后,只需运行“ apt-get install -f”即可重新安装该软件包,并且还修复了其他一些具有破坏性依赖关系的软件包。这是对的libx11数据包在Debian 7.
bchurchill

--dry-run如您所说,如果没有,它对我有用。谢谢!
forvas

69

对于一半安装的软件包错误,--reinstall对我有用:

sudo apt-get install --reinstall packagename 

1
是的,但是警告说,在重新安装软件包名称之后,apt-get将继续配置任何半配置的软件包。
塞德里克·奈特

5
这比公认的答案更安全。
赞纳

sudo apt-get install --reinstal ncurses-base,后来我使用root用户(sudo -s)运行sudo apt-get更新,它的工作
原理

大。只有那个解决方案解决了我的问题
iWizard '18年

这为我做到了。php-pear让我头疼。谢谢!
pcarvalho

6
sudo apt install --reinstall packagename

这就像魅力。它解决了我几个月来一直遇到的问题。我的包libmysqlcppconn7v5

我所做的就是奔跑 sudo apt install --reinstall libmysqlcppconn7v5


2

如果要通过GUI修复此问题,则可以使用突触。Synaptic是一个出色的软件包管理工具,曾经包含在旧版本的ubuntu中。要安装它:

sudo apt-get install synaptic

单击修复损坏的软件包。


synaptic没有在破损类别中列出该软件包:(
Barun 2014年

2

软件包kibana出现了相同的“半安装软件包”问题。我收到以下错误:

dpkg: error processing kibana (--configure):
package kibana is not ready for configuration
cannot configure (current status 'half-installed')
Errors were encountered while processing:
  kibana
E: Sub-process /usr/bin/dpkg returned an error code (1)

如果仍然有人遇到此类问题,则可以尝试以下操作:

sudo rm /var/lib/dpkg/info/kibana*
cd /var/cache/apt/archives
sudo rm kibana*
apt-get --reinstall install kibana

这对我有用。您只需要用半安装的软件包名称替换单词“ kibana”。


2

这可以解决您的问题,而无需重新安装软件包。

sudo dpkg --force-remove-reinstreq --remove <package_name here>

其次是: sudo apt-get update


为什么--force-remove-reinstreq呢 程序包管理器未声明需要重新安装。通常,常规删除对未配置的软件包来说效果很好。-1
大卫·佛斯特

这就是我在sudo apt-get remove <package无法选择时要执行的操作,并且我不想重新安装该一半安装的软件包。然后,我--force-remove-reinstreq用来删除那些垃圾。.PS:它在Linux Mint上。会有所不同,因为Linux是基于Ubuntu的
。.– CodeGeass

1
软件包管理器在所有基于Debian的发行版中都工作相同(毕竟这就是dpkg代表的意思),但是您不应该使用--force-*“以防万一”。错误消息的出现是有原因的,没有经验的用户不应掉以轻心,这就是为什么您不应该--force-*向他们建议不必要的选项的原因。否则,我们可能只是建议总是使用--force-all或者更好的是,除去--force-*从选项dpkg一起,并让他们成为默认行为,因为那将是更容易,更方便。
大卫·佛斯特

好了,承认吧...我更加关心获得比完成任务,知道什么以及究竟怎么做.. ..道歉
CodeGeass

嗯...我只是看到已接受的答案暗示了相同的意思。所以我可能--force-remove-reinstreq不必要是错的。但这也意味着您的答案(几乎)是重复的。下次好运。
David Foerster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.