当前位置: 首页>>技术问答>>正文


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

,

问题描述

apt-get man’s page上,可以找到:

install pkg(s)
This option is followed by one or more packages desired for installation. Each package is a package name, not a fully qualified filename (for instance, in a Fedora Core system, glibc would be the argument provided, not glibc-2.4.8.i686.rpm).
All packages required by the package(s) specified for installation will also be retrieved and installed.
[…]

build-dep source_pkg
Causes apt-get to install/remove packages in an attempt to satisfy the build dependencies for a source package.

听起来这两个都试图满足依赖关系,但是我在安装matplotlib的过程中得到了不同的结果:apt-get intall在我的virtualenv中不能与我后续的pip install matplotlib一起使用,而apt-get build-dep确实*。

*是的,我需要在一个venv中安装matplotlib,但是pip无法解决一些依赖关系,所以我懒得用apt来解决它

最佳解决方法

简短的版本。

apt-get install

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

apt-get build-dep

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

命令sudo apt-get build-dep packagename意味着安装’packagename’的所有依赖项,以便我可以构建它。所以build-dep是一个apt-get命令就像安装,删除,更新等。

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

有关安装matplotlib的信息,请参阅To Install matplotlib on Ubuntu

资料来源:ManPage& Ravi Saive

次佳解决方法

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

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

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

你引用的man部分表明了这一点(它讨论了“满足包的构建依赖性”),但是如果不事先知道何时使用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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6585.html,未经允许,请勿转载。