如何通过dpkg -i或apt安装deb文件?


600

我有一个安装的Deb软件包。

我应该用dpkg -i my.deb还是apt 安装?

两者都能很好地处理软件依赖性问题吗?

如果使用apt,如何通过apt从deb安装?


您也可以使用aptitude来删除不必要的软件包。
拉梅什2014年

2
我建议不要直接使用dpkg。如果是单个deb,请使用gdebi;如果是多个deb,请使用APT本地存储库
潘迪2015年

5
为什么......... @Pandya
Tim

2
@Tim,因为dpkg它不能解决依赖关系。
潘迪2015年

1
@Tim gdebi可以识别缺少的依赖项,可以下载并安装(使用apt),可以安装并配置(使用dpkg)。
潘迪2015年

Answers:


769

当您apt用来安装软件包时,它会在引擎盖下使用dpkg。使用apt安装软件包时,它首先创建所有依赖项的列表,然后从存储库中下载它。

下载完成后,它将调用dpkg安装所有那些文件,以满足所有依赖性。

因此,如果您有一个.deb文件:

  • 您可以使用以下方法安装它:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • 您可以使用sudo apt install ./name.deb(或sudo apt install /path/to/package/name.deb)安装它。

    对于旧apt-get版本,必须首先将deb文件移动到/var/cache/apt/archives/目录。对于两者,执行此命令后,它将自动下载其依赖项。

  • 安装gdebi并使用它打开.deb文件(右键单击 -> 打开方式)。它将安装带有所有依赖项的.deb软件包。

    注意:APT维护软件包索引,它是/etc/apt/sources.list文件和/etc/apt/sources.list.d目录中定义的repo中可用软件包的数据库。如果软件包索引中未包含deb所需的依赖关系,则所有这些方法将无法满足软件依赖关系)


为什么要使用sudo apt-get install -faftersudo dpkg -i /path/to/deb/file(在第一种方法中提到)?

来自man apt-get

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

dpkg安装软件包并且不满足软件包依赖性时,它将使软件包处于“未配置”状态,并且该软件包被视为损坏。

sudo apt-get install -f 命令尝试通过安装缺少的依赖项来修复此损坏的程序包。


2
@ Tim,apt-get用于从存储库安装软件包。它维护软件包列表以及它们各自的存储库地址。因此,仅移动/ var / cache / apt / archives目录中的apt软件包列表中没有的.dev文件将不起作用。因为每当您尝试使用apt-get安装此软件包时,它都会搜索其存储库(不存在)。为此,您必须创建本地存储库,我认为这是没有用的。
g_p 2015年

1
@g_p谢谢!我在上面的答案中有些困惑。您写道:“(如果apt软件包列表中存在.deb软件包,它将起作用)”-我不明白这是什么意思。如何确保.deb软件包出现在apt软件包列表中?
BKSpurgeon '16

1
@BKSpurgeon,我在回答中添加了一些信息。要查明索引中是否存在包,请运行apt-cache search <package name>。您也可以使用apt-cache policy <package name>,这还将提供一些其他信息。
g_p

1
这些方法是否还会执行通常由apt执行的签名检查?还是可能以这种方式安装被篡改的.deb文件?
Boann

8
可以使用apt-get来简单地使用安装软件包apt-get install /path/to/package/name.deb。如果这个答案的作者决定整合它,那将是整齐的。如果没有,我会在这里有足够的代表的时候去添加答案
Sam Hartman

91

使用安装foo.deb文件dpkg -i foo.deb。如果存在一些无法解决的依赖关系错误,请apt-get install -f随后运行。


Unable to locate package尝试这种方式,感到困惑。在切换到存档文件夹后,我仅在Windows中使用了软件包名称。应该是./<file name>为Unix,如果当前文件夹或完整路径英寸 也就是说,如果deb不在中的文件夹中PATH
阿列克谢·马蒂安诺夫

60

这是在.deb命令行上在Ubuntu上安装文件的最佳方法:

sudo gdebi skype.deb

如果尚未gdebi安装,请使用进行安装sudo apt install gdebi-core

为什么选择gdebi?

gdebi将查找.deb文件的所有依赖项,并在尝试安装.deb文件之前安装它们。我发现这比sudo dpkg -i skype.deb && sudo apt install -f。后者在某些情况下非常渴望删除依赖项。例如,当我尝试安装Skype时,它尝试删除96(!)软件包,包括诸如compizunity!之类的软件包。gdebi给出了更清晰的错误消息:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(顺便说一下,这是该特定问题的解决方案。)


工作很棒!顺便说一句,可能是尝试删除有关过渡/临时软件包的尝试吗?还是您认为这确实会破坏系统?
Aquarius Power'7

杜德(Dude),我遇到了您的解决方案问题。我正在尝试安装Rstudio。它会自动为我找到旧版本的R。使用@g_p解决方案时,我只能安装Rstudio。
Dr_Hope

39

您可以通过以下方式安装本地.deb软件包:

sudo apt install ./foo.deb

确保指定本地相对或绝对路径(./如果在当前目录中),否则它将foo.deb在远程存储库中查找并失败。


2
应该将其标记为正确答案。
Rael Gugelmin Cunha

@RaelGugelminCunha不是100%正确。sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt:加载共享库时出错:
usr/lib/x86_64

2
@mvladk请注意语法:您缺少文件./之前的deb
Rael Gugelmin Cunha

绝对是最好/最简单的答案。
gerardw

15

在之前检查的依赖dpkg -I my.debapt-get install的依赖dpkg -i my.deb

也许您可以复制my.debin /var/cache/apt/archives并直接使用进行安装,apt-get但我从未尝试过。 不工作,apt-getdpkg正在寻找档案列出的软件包。


谢谢。在您的第一感觉中,您的意思apt-get install my.debapt-get install?是否可以从deb文件安装?那之后为什么需要dpkg -i my.deb呢?
2014年

我总是用安装本地.debs dpkg -i,我的理解是apt,除了/var/cache/...可以下载的目录(我可能是错的)之外,没有安装它们的选项
2014年

似乎apt-get install ./my.deb可以做些什么,因为它可以输出很多东西。它有什么作用?
2014年

它做的太多了:-)无效,请参阅@Igor_Dvoretskyi的答案很完美,我忘了-f
Alex

5

最简单的答案是通过运行来使用dpkg dpkg -i packagename.deb。然后,您可以通过运行卸载它dpkg -r packagename.deb
apt-get是基于dpkg的更高级别的安装程序,因此您可以这样做apt-get install packagename.deb
将其添加到apt-get存档目录(/var/cache/apt/archives)中将是有益的,因此您可以将其作为具有相关性的程序包而不是独立的.deb存档来引用。
另外,通过将其添加到apt-get存档目录中,您就有机会将依赖项与一起使用apt-get install packagename。这样一来,您便可以使用任何手动添加的依赖项来安装它,而不是dpkg的独立基于存档的系统。



-3

如果要安装Chrome,这非常简单。

将您的Chrome文件安装为:

dpkg -i googlechrome.deb.

有时可能会出现一些依赖项错误,如下所示:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

因此,要解决上述问题,您需要添加依赖项。输入以下命令:

apt-get install -f

输入上述命令后,依赖项将添加到您的计算机中,并且.deb将安装Debian软件包()文件。

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.