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

Vin*_*rão 18 debian dependencies

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

sma*_*mmy 23

apt-cache depends pkgname 将显示包的依赖项。

如果您想在一个命令中完成所有操作,您可以做的比以下更糟:

apt-get install `apt-cache depends pkgname | awk '/Depends:/{print$2}'`
Run Code Online (Sandbox Code Playgroud)


小智 15

apt-get 提供了一个命令...

apt-get build-dep <package name>
Run Code Online (Sandbox Code Playgroud)

从你得到的手册页

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

  • “构建依赖项”和“依赖项”之间难道没有区别吗?比如,如果你通常安装一个程序,你会得到它实际运行所需的依赖项,而对于构建依赖项,我会更多地考虑库、编译器之类的东西。因此,因为我不确定(这个答案确实有赞成票),但在我看来,获取构建依赖项与获取包具有的(运行)依赖项相同并非微不足道? (12认同)

ste*_*tew 5

aptitude 会让你在安装时指定一个查询而不是包名。如果你想安装named包的依赖foo,你可以安装反向依赖的包foo

aptitude install '?reverse-depends(foo)'
Run Code Online (Sandbox Code Playgroud)

或者

aptitude install '~Rfoo'
Run Code Online (Sandbox Code Playgroud)

安装一个包然后删除它的问题是,所有作为依赖项安装的包都将被标记为“自动安装”,并且会被 aptitude 的任何安装/删除/升级操作或运行时删除,apt-get autoclean除非你使用aptitude markapt-mark命令将它们标记为手动安装。

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