В чем разница между apt-get install и apt-get build-dep?

На странице apt-get man можно найти следующее:

установить pkg (s)
За этой опцией следует один или несколько пакетов, необходимых для установки. Каждый пакет представляет собой имя пакета, а не полное имя файла (например, в системе Fedora Core, glibc будет предоставленным аргументом, а не glibc-2.4.8.i686.rpm).
Все пакеты, требуемые пакетом (пакетами), указанными для установки, также будут загружены и установлены .
[…]

build-dep source_pkg
Вызывает apt-get для установки / удаления пакетов с целью удовлетворения зависимостей сборки для исходного пакета.

Это похоже на то, что оба из них пытаются удовлетворить зависимости, но у меня были разные результаты при установке matplotlib с каждым из них: apt-get intall не работал с моей последующей pip install matplotlib в моей pip install matplotlib , а apt-get build-dep сделал*.

* Да, мне нужно было установить matplotlib в venv, но 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 см. Установка matplotlib на Ubuntu

Источник: ManPage & Ravi Saive

Разница заключается в том, нужны ли зависимости во время выполнения, а не во время сборки .

Например, возможно, я создаю двоичный файл, который использует openssl. Во время сборки мне понадобятся файлы заголовков openssl, которые находятся в libssl-dev . Затем я перечислил это как Build-Depends .

Однако результирующий двоичный файл и пакет не нуждаются в заголовке и других файлах разработки, поэтому во время установки мне не нужен libssl-dev . Тогда это не будет в « Depends . Но libssl , библиотека времени выполнения, связанная с моим двоичным 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. Обратите внимание на его 'под заголовком Binary packages :

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