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

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

 dpkg -i ./foo-1.2.3.deb 

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

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

使用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的安装。

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

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

 sudo gdebi my_package_1.0.deb 

Gdebi

gdebi安装deb包及其依赖项。 要使用它运行:

 sudo gdebi package.deb 

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

有关选项的完整列表,请参阅man gdebi

gdebi是命令行,相当于默认情况下在Ubuntu中包含的同名图形工具。 图形工具的命令是gdebi-gtk ,具有类似的function:

gdebi-GTK

从apt 1.1开始(在Xenial(16.04)中提供,拉伸) apt install也允许本地文件:

 sudo apt install ./foo-1.2.3.deb 

更简单,更清洁。

请参阅发布公告

赛跑

 sudo apt-get install -f 

用dpkg安装软件包后可以解决破坏的依赖关系(至少man apt-get如此……)。 我会检查时不适当的更新。

dpkg没有依赖支持。 有一种解决方法,但这需要你创建一个本地数据库(因此你已经知道了依赖关系),它被认为是过时的(…)。

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

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

你是怎么下载.deb的? 一些新的11.04function是从网站下载的.deb的处理:它在USC中打开,因此安装程序将解决依赖关系。

根据安德鲁的评论编辑: sudo gdebi foo-1.2.3.deb就可以了!

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

双击包,应该有一个安装按钮。

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

 #!/bin/bash DEBIAN_FILE1=$1 dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install 

我假设您在主文件夹中创建了该文件。 使用chmod +x dpkg-dep-inst使其可执行,并使用sudo cp 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 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 

实际上答案是dpkg包管理器无法安装开箱即用的依赖项。 你man dpkg ,发现了。 因此,您需要使用基于dpkg aptapt-getaptitude等工具。

我会说同样的情况是针对另一个Linux半球上的rpm包管理器。 rmp并不意味着要进行基于依赖的安装。 它可以安装单个软件包,并且为了安装你使用yumurpmiup2date的依赖项,这些都是基于RPM的。

如上所述,使用dpkg直接安装软件包存在轻微的危险,因为后续的依赖性解析可能会因为@Rinzwind概述而导致系统损坏。