说,我有foo-1.2.3.deb依赖于perlpython,但是,运行命令:

dpkg -i ./foo-1.2.3.deb


不会安装这些依赖项。因此,我必须手工apt-get install perl python

如何让dpkg -i自动为我安装这些依赖项?

评论

从.deb安装软件时,如何自动获取缺少的依赖项的可能重复项?

@ pd12:祝您有循环参考! :-D

呵呵,我决定将两者都链接起来,看看国防部会选择哪一个。

令人惊讶的是,在2016年,.deb图形安装仍然无提示地失败,而没有告诉用户有关缺少依赖项的任何信息。

“是因为我将sudo apt install pkg编写到bash脚本中,而没有使用sudo执行该脚本?”这取决于您输入密码还是配置操作系统不要求脚本密码。无论如何,您是否捕获了脚本的输出?

#1 楼

使用dpkg之后,运行以下命令可以帮助我安装所需的依赖项:

sudo apt-get -f install


总的来说,您的终端应如下所示:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...


注意有关Setting up package_with_unsatisfied_dependencies的行。这样可以修复(并完成)package_with_unsatisfied_dependencies.deb的安装。

评论


我应该再次运行sudo dpkg -i mypackage.deb吗?

–穆罕默德·盖尔巴纳(Muhammad Gelbana)
2013年11月22日13:41



运行sudo apt-get -f之后,安装我的软件包,它的依赖项都已安装。不需要运行sudo dpkg -i my_package.deb,它将再次安装该软件包。

– Gus E
2013年12月13日16:20



以下是在Ubuntu 14.04上的作品:sudo dpkg -i package.deb; sudo apt-get -f安装; sudo dpkg -i package.deb。第一个dpkg -i运行标记依赖关系,apt-get -f install安装必需的依赖关系,第二个dpkg-成功安装软件包。请注意,apt-get install -f是完全不同的命令。

– Mikko Rantalainen
16-4-21在11:19



@ysth不,不要dpkg -i --force;这将强制安装损坏的包装!运行dpkg / without / --force将在软件包数据库中进行必要的输入,以便apt-get -f install可以正确执行操作。

– Brian A. Henning
16年5月10日在15:21

@Lotharyx:我现在无法尝试,但是我不认为没有力的dpkg(由于缺少依赖项而失败)会在软件包数据库中产生一个条目

–ysth
16年5月10日17:00

#2 楼

从apt 1.1开始(可在Xenial(16.04)中使用,拉伸)apt install还允许本地文件:

sudo apt install ./foo-1.2.3.deb


如此简单和整洁。

查看发布公告

评论


这是时候了

–迈克
16年8月4日在18:13

此解决方案无效。所发生的只是一堆错误。

–比利S
16-10-1在14:29

更正了命令,上面的注释指的是以前版本的答案,但缺少必要的./或路径

–詹娜♦
17年9月2日在10:36

最好的答案,现在,即使Debian稳定版也具有apt 1.4.9

– saeedgnu
19年4月22日在14:54

这个功能的存在令我震惊。这绝对应该是公认的答案。

–rajb245
19/09/13在13:25

#3 楼

您可以安装gdebi-core,这是GDebi软件包安装程序从10.04或更早版本开始的命令行版本。在较新版本的Ubuntu中,软件中心用于安装debs,它没有等效的命令行。

要使用gdebi安装deb软件包,只需运行: br />
sudo gdebi my_package_1.0.deb


评论


可能是这里最好的答案之一。

– MarkSkayff
20年8月28日在11:49

#4 楼

Gdebi
gdebi安装了一个deb软件包及其依赖项。要运行它,请运行:
sudo gdebi package.deb

在Ubuntu的较新版本中,默认情况下未安装它,因此您需要从存储库中安装它。
有关完整选项列表,请参阅man gdebi。 。
gdebi是等效于默认情况下在Ubuntu中包含的同名图形工具的命令行。图形工具的命令为gdebi-gtk,并具有类似的功能:


评论


gdebi-gtk不会显示必需的deps(至少我在这里有这个版本,看起来像个bug),但是命令行会显示!如果我们有另一台装有软件包的机器,我们可以根据这样的deps列表在其上使用dpkg-repack :)

–水瓶座力量
18年7月13日在21:37

#5 楼

在使用dpkg安装软件包之后,运行

sudo apt-get install -f


可能会解决损坏的依赖关系(至少man apt-get这么说吧...)。病情更新,何时检查。

评论


我应该再次运行sudo dpkg -i mypackage.deb吗?

–穆罕默德·盖尔巴纳(Muhammad Gelbana)
13年11月22日在13:42

apt-get -f install可以运行,但是apt-get install -f不一样。

– 200_success
15年5月13日在0:20

#6 楼

如果需要运行自动解决.deb文件的所有依赖性并使用同一命令安装.deb文件及其缺少的依赖性的命令,则需要使用sudo apt update更新安装的软件。然后打开终端,使用cd将目录更改为包含package-name.deb的目录,然后键入:
apt install --simulate ./package-name.deb # This command does not require sudo.

其中package-name.deb应该替换为位于当前目录中的.deb文件的名称。您正在尝试安装。
上面的命令不会安装任何内容,但会显示一条消息,列出默认Ubuntu存储库中不存在的package-name.deb依赖项。您将需要手动下载并安装这些缺少的依赖程序包的.deb文件,以便安装package-name.deb。在安装任何手动下载的依赖软件包之前,请运行apt install --simulate ./manually-downloaded-package.deb,以检查这些软件包本身是否具有未满足的依赖关系。
如果模拟命令成功完成,请运行以下命令来安装package-name.deb。
sudo apt install ./package-name.deb

如果.deb文件都位于当前目录中,则同一命令中可以有多个.deb文件。
 sudo apt install ./package-name-1.deb ./package-name-2.deb
 


#7 楼

dpkg不具有依赖项支持。有一种解决方法,但是这需要您创建一个本地数据库(因此您已经知道依赖项),并且它被认为已过时(...)。

是否必须命令行? (服务器安装吗?)如果这样的话,也请看看apt-get -f,但要小心:安装后解决依赖关系可能会导致系统损坏。

gdebi(gui前端)曾经能够做到

如何下载.deb。 11.04的一些新功能是处理从网站下载的.deb:它在USC中打开,因此安装程序将解决依赖性。

根据安德鲁的评论进行编辑:
sudo gdebi foo-1.2.3.deb
可以解决问题!

评论


gdebi仍然可以用于此目的。软件中心现在只是默认应用程序。另外,正如Chen Xiao-Long所指出的,gdebi也可以在命令行上使用。

–andrewsomething
2011年5月4日在16:26

凉!那么问题就有了答案,因为看起来gdebi也可以在命令行上使用。

–灵风
2011年5月4日16:50

这应该是公认的答案。

–prosti
18年8月16日在18:56

#8 楼

作为gdebi-gtk的替代产品,您可以使用Ubuntu软件中心。

双击该软件包,然后应该有一个安装按钮。

#9 楼

您可以使用以下内容创建文件dpkg-dep-inst

#!/bin/bash

DEBIAN_FILE1=
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install


我假设您是在主文件夹中创建该文件的。使用chmod +x dpkg-dep-inst使其可执行,然后使用/usr/local/bin将其移至sudo cp dpkg-dep-inst /usr/local/bin

现在,您可以使用以下方式自动安装具有依赖项的debian软件包:

sudo dpkg-dep-inst foo-1.2.3.deb


评论


使用apt-get --yes --fix-broken安装并自动进行修复。

–卢卡斯
2014年4月4日在18:12

@ysth不,一般而言。

–BuZZ-dEE
2015年12月17日在9:17

#10 楼

我只是遇到了这个问题。但是,调用apt-get install -f不会安装推荐的依赖项!然后唯一的解决方法是创建一个本地存储库并添加到/etc/apt/sources.list,即:

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update


#11 楼

实际上,答案是dpkg软件包管理器无法立即安装依赖项。您找到了man dpkg,发现了这一点。因此,您需要使用基于apt的工具apt-getaptitudedpkg,...。

我要说的是另一半Linux上的rpm软件包管理器也是如此。 rmp并非旨在进行基于依赖项的安装。它可以安装单个软件包,并且要使用yumurpmiup2date来安装依赖项,这些都是基于RPM的。如@Rinzwind所述,解决可能最终会导致系统损坏。