apt-get install和apt-get build-dep有什么区别?


33

apt-get man的页面上,可以找到以下内容:

install pkg(s)
此选项后是一个或多个安装所需的软件包。每个软件包都是软件包名称,而不是完全限定的文件名(例如,在Fedora Core系统中,glibc是提供的参数,而不是glibc-2.4.8.i686.rpm)。
指定安装的软件包所需的所有软件包也将被检索和安装
[...]

build-dep source_pkg
导致apt-get安装/删除软件包,以 尝试满足源软件包的构建依赖性

听起来这两者都在尝试满足依赖关系,但是在安装matplotlib这些组件时,我得到了不同的结果:在我的virtualenv中apt-get intall无法与我的后续组件pip install matplotlib一起工作,而apt-get build-dep在*中则无法工作。

*是的,我需要安装matplotlib在venv中,但是pip无法解决某些依赖关系,因此我懒惰地使用apt来解决它

Answers:


39

简短版本。

apt-get install

安装新的程序包,自动解析并下载相关的程序包。如果已安装软件包,请尝试升级到最新版本。

apt-get build-dep

导致apt-get安装/删除软件包,以尝试满足源软件包的构建依赖关系。

该命令的sudo apt-get build-dep packagename意思是为“ packagename”安装所有依赖项,以便我可以构建它。”因此,build-dep是apt-get命令,就像安装,删除,更新等一样。

build-dep命令在系统中搜索本地存储库并安装软件包的构建依赖关系。如果该软件包在本地存储库中不存在,它将返回错误代码。

有关安装matplotlib的信息,请参见在Ubuntu上安装matplotlib。

来源:ManPage和Ravi Saive


19

区别在于,是否需要在运行时(而不是在构建时)依赖项。

例如,也许我正在构建一个使用openssl的二进制文件。在构建时,我需要位于中的openssl头文件libssl-dev。然后,我将其列为Build-Depends

但是,生成的二进制文件和软件包不需要标头和其他开发文件,因此在安装时我不需要libssl-dev。那就不在了Depends。但是libssl,我的二进制文件链接到的运行时库需要在中Depends

您引用的手册部分对此进行了说明(它谈论的是“满足软件包的构建依赖关系”),但是如果没有使用Build-Depends的先验知识,这可能会造成混淆。

看一下Debian策略指南,了解控制文件字段的定义:

http://www.debian.org/doc/debian-policy/ch-controlfields.html

这是关于构建依赖的部分。请注意,它位于“ 源程序包的依赖关系”标题下:

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-sourcebinarydeps

这就是关于Depends的话题。注意它在二进制包标题下:

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps


谢谢。看来我需要根据您的描述从源代码构建库。
kchoi
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.