在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