В чем разница между 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 с каждым из них: apt-get intallне работал с моим последующим pip install matplotlibв моем virtualenv, в то время как apt-get build-depсделал *.

*Да, мне нужно было установить matplotlibв venv, но pip не смог разрешить некоторые зависимости, поэтому я лениво использовал apt, чтобы решить это

Анто
источник

Ответы:

39

Краткая версия.

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 смотрите Установка Matplotlib в Ubuntu

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

Митч
источник
19

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

Например, возможно я создаю двоичный файл, который использует 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-Зависит. Обратите внимание, что он находится в заголовке «зависимости для исходных пакетов»:

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

И этот говорит о Зависит. Обратите внимание на его 'под заголовком Binary package :

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

roadmr
источник
Спасибо. Кажется, мне понадобится build-dep для сборки библиотеки из исходного кода в соответствии с вашим описанием.
kchoi