如何让dpkg -i为我安装依赖项?


324

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

dpkg -i ./foo-1.2.3.deb

不会安装这些依赖项。所以我必须apt-get install perl python用手。

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



5
@ pd12:祝您有循环参考!:-D
David Foerster,2015年

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

Answers:


416

使用完后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


8
我应该再跑sudo dpkg -i mypackage.deb一次吗?
穆罕默德·盖尔巴纳

23
运行sudo apt-get -f install我的包后,它的依赖项全部安装完毕。sudo dpkg -i my_package.deb不需要运行,只需重新安装软件包即可。
Gus E

5
继在Ubuntu 14.04的作品:sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb。第一次dpkg -i运行标记依赖关系,apt-get -f install安装所需的依赖关系,第二次dpkg -i成功安装软件包。请注意,这apt-get install -f是完全不同的命令。
Mikko Rantalainen '16

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

@Lotharyx:我现在无法尝试,但是我不认为没有强制的dpkg(由于缺少依赖项而失败)会在软件包数据库中输入一个值
ysth

111

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

要使用gdebi安装deb软件包,只需运行:

sudo gdebi my_package_1.0.deb

64

从apt 1.1开始(在Xenial(16.04)中可用,stretch)apt install也允许本地文件:

sudo apt install ./foo-1.2.3.deb

如此简单和清洁。

查看发布公告


4
现在该是可用的时间
Mike

此解决方案无效。发生的一切只是一列错误。
Billy S

@BillyS很遗憾听到它对您不起作用,但是没有您正在使用的发行版,以及您遇到了什么错误,这根本无法执行。
textshell

该命令对我无效,但apt ./install foo-1.2.3.deb有效。
恩克·阿尔蒂

1
更正了命令,上面的注释提到了先前版本的答案,但缺少必要的内容./或路径
Zanna

38

格德比

gdebi安装一个deb软件包及其依赖项。要使用它,请运行:

sudo gdebi package.deb

在较新版本的Ubuntu中,默认情况下未安装它,因此您需要从存储库中安装它。

请参阅man gdebi以获取完整的选项列表。

gdebi是与默认情况下包含在Ubuntu中的同名图形工具等效的命令行。图形工具的命令是gdebi-gtk并且具有类似功能:

gdebi-gtk


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

21

跑步

sudo apt-get install -f

用dpkg安装软件包后,可能会解决损坏的问题(至少可以使用apt-get这么说...)。病情更新时我将对其进行检查。


我应该再跑sudo dpkg -i mypackage.deb一次吗?
穆罕默德·盖尔巴纳

3
apt-get -f install可以,但是apt-get install -f不一样。
200_success,2015年

9

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

一定是命令行吗?(服务器安装吗?)如果这样的话,也请apt-get -f注意一下,但要小心:安装后解决依赖关系可能会使您的系统损坏。

gdebi(gui前端)曾经能够做到这一点,但被USC取代。

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

根据安德鲁的评论编辑: sudo gdebi foo-1.2.3.deb 会成功的!!


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

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

这应该是公认的答案。
prosti

3

作为替代方案,gdebi-gtk您可以使用Ubuntu软件中心。

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


3

您可以创建dpkg-dep-inst具有以下内容的文件。

#!/bin/bash

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

我假设您在主文件夹中创建了该文件。使其可执行文件chmod +x dpkg-dep-inst并将其移动到/usr/local/binsudo cp dpkg-dep-inst /usr/local/bin

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

sudo dpkg-dep-inst foo-1.2.3.deb

1
使用apt-get --yes --fix-broken install并使固定自动进行。
卢卡斯

@ysth不,一般而言。
BuZZ-dEE 2015年

1

我只是遇到了这个问题。呼叫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

0

实际上,答案是dpkg程序包管理器无法立即安装依赖项。你凸轮man dpkg,发现了。所以,你需要使用类似的工具aptapt-getaptitude,...的基础上dpkg

我要说的是rpm其他Linux半球上的软件包管理器也是如此。rmp并不意味着进行基于依赖的安装。它可以安装单个包,并安装使用的依赖关系yumurpmiup2date这些都是基于RPM。

如前所述,dpkg直接安装软件包有一点危险,因为稍后解决依赖项解析可能会导致系统损坏,如@Rinzwind所述。

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.