在Debian或Ubuntu中仅安装给定软件包的依赖项(apt)


18

有没有更好的方法来仅安装软件包的必需依赖关系,而不是直接使用apt-get(或dpkg的任何其他前端)直接安装它,然后立即将其删除,而忽略其依赖关系呢?

Answers:


22

apt-cache depends pkgname 将显示软件包的依赖关系。

如果您希望在一个命令中全部完成操作,则可能会比以下情况更糟:

apt-get install `apt-cache depends pkgname | awk '/Depends:/{print$2}'`

16

apt-get提供了一个确切的命令...

apt-get build-dep <package name>

从手册页中您可以获得

build-dep导致apt-get安装/删除软件包,以尝试满足源软件包的构建依赖性。默认情况下,依赖关系可以满足本机构建程序包的需求。如果需要,可以使用--host-architecture选项指定主机架构。


9
build dependencies和之间没有区别dependencies吗?与之类似,如果您通常安装程序,则将获得它实际需要运行的依赖关系,而对于构建依赖关系,我会更多地考虑库,编译器之类的东西。因此,我不确定(此答案确实有争议),但在我看来,获得构建依赖项与获取程序包具有的(运行)依赖项并不无关紧要?
Nanne

1
你是对的。很久以前,在回答这个问题时,我对构建依赖关系(构建时间)和依赖关系(运行时间)之间的差异还没有完全了解。谢谢您澄清Nanne!
弥敦道(Nathan Crock)

4

aptitude可让您在安装时指定查询而不是软件包名称。如果要安装名为的软件包的依赖项foo,则可以安装与以下软件包具有相反依赖性的软件包foo

aptitude install '?reverse-depends(foo)'

要么

aptitude install '~Rfoo'

安装软件包然后将其删除的问题是,所有作为依赖项安装的软件包都将被标记为“自动安装”,并且将由任何安装/删除/升级操作根据情况或在您运行时将其删除,apt-get autoclean除非您使用aptitude markapt-mark命令将其标记为手动安装。

但是,这引出了一个问题,为什么我最好的猜测是为什么要尝试为要手动编译的某些软件安装依赖项。在这种情况下,您应该先使用来安装构建依赖关系apt-get build-dep packagename,然后再使用该equiv包来构建具有运行时依赖关系(通常与构建依赖关系不同)的虚拟包,方法是使用该包来构建具有正确依赖关系的虚拟包。您手动编译的程序。equivsAPT HOWTO中查看有关的信息


3

如果从源代码构建pkgname

apt-get build-dep pkgname

1
构建依赖项不是运行时依赖项
2016年

>>在构建来源PKGNAME的情况下
ERI

我不知道在哪里保证/记录在案。此外,无论出于任何目的,都不会使其相同。我一直都在使用build-dep 但我真的很想为当前问题提供一个更好的答案。我也需要
sehe
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.