我应该用
dpkg -i my.deb
还是apt来安装?都可以很好地处理软件依赖问题吗?
如果使用apt,如何通过apt从deb进行安装?
#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(!)软件包,包括compiz
和unity
之类的软件包! 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
)文件将被安装。 >
评论
您可以使用aptitude来删除不必要的软件包。我建议不要直接使用dpkg。如果是单个deb,请使用gdebi;如果是多个deb,请使用APT本地存储库。
为什么......... @Pandya
@Tim,因为dpkg无法解决依赖关系。
@Tim gdebi可以识别缺少的依赖项,可以下载并安装(使用apt),可以安装并配置(使用dpkg)。