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

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

apt-get 手册页,可以发现:

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

构建依赖源包
让 apt-get 安装/删除软件包 尝试满足构建依赖关系获取源包。

听起来这两个都在试图满足依赖关系,但我得到了不同的结果安装matplotlib对于其中的每一个:apt-get intall都无法与我pip install matplotlib的虚拟环境中的后续内容一起工作,而apt-get build-dep可以*。

*是的,我需要在 venv 中安装matplotlib,但 pip 无法解决某些依赖项,因此我偷懒使用了 apt 来解决这个问题

答案1

简短版本。

apt-get install

安装新包,自动解析并下载依赖包。如果包已安装,则尝试升级到最新版本。

apt-get build-dep

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

该命令的sudo apt-get build-dep packagename意思是安装“packagename”的所有依赖项,以便我可以构建它”。因此,build-dep 是一个 apt-get 命令,就像 install、remove、update 等一样。

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

要安装 matplotlib,请参阅在 Ubuntu 上安装 matplotlib

来源:ManPage & Ravi Saive

答案2

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

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

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

你引用的章节表明了这一点(它谈到“满足建造您可能已经了解了“包的依赖项”,但如果事先不知道何时使用 Build-Depends,这可能会造成混淆。

请参阅 Debian 政策指南以了解控制文件字段的定义:

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

这是 Build-Depends 部分。请注意,它位于“依赖项”下来源包”标题:

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

相关内容