我有一个要安装的deb软件包。

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

都可以很好地处理软件依赖问题吗?

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

评论

您可以使用aptitude来删除不必要的软件包。

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

为什么......... @Pandya

@Tim,因为dpkg无法解决依赖关系。

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

#1 楼

当您使用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/目录。对于这两个命令,执行完此命令后,它将自动下载其依赖项。它将安装所有依赖项的.deb软件包。如果软件包索引中不存在deb所需的依赖关系,则所有这些方法都将无法满足软件依赖关系。方法1)?

来自gdebi

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


/etc/apt/sources.list安装软件包并且不满足软件包依赖性时,它将软件包保留在

/etc/apt/sources.list.d命令尝试通过安装缺少的依赖项来修复此损坏的程序包。

评论


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

– g_p
2015年5月6日15:41



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

– BKSpurgeon
16年1月28日在22:16

@BKSpurgeon,我在回答中添加了一些信息。要查找索引中是否存在软件包,请运行apt-cache搜索<软件包名称>。您还可以使用apt-cache策略,该策略还将提供一些其他信息。

– g_p
16年1月29日在15:10

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

– Boann
16-10-11在4:07

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

–山姆·哈特曼
17年5月31日在19:10

#2 楼

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

评论


我无法找到尝试这种方式的包裹,感到困惑。在切换到存档文件夹后,我仅在Windows中使用了软件包名称。如果在当前文件夹或完整路径中,对于Unix,应为./ <文件名>。也就是说,如果deb不在PATH中的文件夹中。

– Alexei Martianov
18年5月28日在4:18

对于脚本,使用apt update && dpkg -i foo.deb || apt install -f -y以确保apt install -y不会删除foo.deb。

– J P
19-10-23在13:38

#3 楼

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

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'


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

评论


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

–水瓶座力量
17年7月2日在17:40

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

–霍普博士
19年1月19日,0:34

#4 楼

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

sudo apt install ./foo.deb


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

评论


这应该标记为正确答案。

– Rael Gugelmin Cunha
18年11月17日在18:23

@RaelGugelminCunha不是100%正确。 sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt:加载共享库时出错:/usr/lib/x86_64-linux-gnu/libstdc++.so.6:无效的ELF标头

–mvladk
19年1月31日在8:17



@mvladk请注意语法:deb文件之前缺少./。

– Rael Gugelmin Cunha
19年1月31日上午10:56

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

– Gerardw
19年7月14日在16:08

#5 楼

请检查与dpkg -I my.deb的依赖关系,并检查与apt-get install之前的依赖关系。和dpkg -i my.deb正在寻找档案中列出的软件包。

评论


谢谢。在您的第一个感觉中,您是说通过apt-get install apt-get install my.deb吗?是从deb文件安装吗?为什么我们之后需要dpkg -i my.deb?

– Tim
2014年10月3日在16:04



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

– Alex
2014年10月3日在16:08

似乎apt-get install ./my.deb会做一些事情,因为它会输出很多东西。它有什么作用?

– Tim
2014年10月3日在16:11

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

– Alex
2014年10月3日,16:20

#6 楼

最简单的答案是通过运行dpkg -i packagename.deb使用dpkg。然后,您可以通过运行dpkg -r packagename.deb来卸载它。
apt-get是基于dpkg的更高级别的安装程序,因此您可以apt-get install packagename.deb

将它添加到您的apt-获取存档目录(/var/cache/apt/archives),因此您可以将其作为具有依赖项的程序包而不是独立的.deb存档来引用。与apt-get install packagename一起使用依赖项。这样一来,您便可以使用任何手动添加的依赖项来安装它,而不是dpkg的基于存档的独立系统。

评论


注意:如果要对本地软件包文件使用apt-get install,则必须将其安装在/ var / cache / apt / archives中,否则apt-get可能仍决定下载它。

–安东尼·威廉姆斯
1月15日11:58

#7 楼

现代apt-get可以简单地通过apt-get install /path/to/package/name.deb来安装软件包。

(应作为对顶部答案的编辑,但被拒绝了-请参见https://unix.stackexchange.com/posts / 159114 / edit)

评论


这不适用于apt 1.0.9.8.4 for amd64编译于2016年12月11日09:48:19

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
17年9月28日在22:10

#8 楼

如果要安装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


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