Как установить только зависимости пакета?

Запуск sudo apt-get install <PACKAGE> установит пакет, его зависимости и любые другие рекомендуемые пакеты.

Однако, как представляется, не существует способа установить только зависимости пакета и исключить сам пакет.

Как это сделать?

40
задан 1 November 2011 в 23:57

6 ответов

Это установит все пакеты в поле Depends и PreDepends пакета:

sudo apt-get install $(apt-cache depends <PACKAGE> | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ')

В основном вы запрашиваете все зависимости, отфильтровываете Depends и форматируете вывод для apt-get.

Одна из проблем - это зависимости, такие как

Depends: pulseaudio
  pulseaudio:i386

или виртуальные пакеты, такие как

Depends: <java6-runtime-headless>
  default-jre-headless
  openjdk-6-jre-headless

Итак: используйте с осторожностью - это не работа во всех случаях!

20
ответ дан 25 May 2018 в 17:20
  • 1
    В большинстве случаев это не обрабатывается, например. он полностью разрушит виртуальные пакеты (которые печатаются в угловых скобках). См. Здесь примеры: askubuntu.com/questions/25361/… – Trevor Robinson 27 January 2012 в 04:06
  • 2
    Спасибо за подсказку, хотя я не совсем уверен, как справиться с этими проблемами. :-( – htorque 27 January 2012 в 04:10
  • 3
    Если возможно, я хотел бы предложить более простое решение с AWK: sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}') – Sergiy Kolodyazhnyy 19 November 2015 в 01:12
  • 4
    Я столкнулся с проблемой виртуального пакета, о которой вы упомянули выше; обновление sed в конвейере до следующего работало для меня: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. В моем случае виртуальному пакету в < > предшествовал пакет, удовлетворяющий ему, поэтому удаление элемента в < > работало нормально. – berto 16 March 2016 в 18:27

Если вы не против копирования / прошлого, просто смоделируйте apt-get install с помощью -s. Таким образом вы увидите, какие другие пакеты будут установлены и / или обновлены, а затем просто удалите имя пакета, который вы не хотите устанавливать из этого списка, и voila.

sudo apt-get install -s <package>

5
ответ дан 25 May 2018 в 17:20

Чтобы просмотреть все зависимости заданного пакета, который не был установлен, вы можете использовать aptitude

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")'

. Чтобы установить зависимости

aptitude search '!~i?reverse-depends("^PACKAGE_NAME$")' -F "%p" | xargs sudo apt-get install

Примеры

Список зависимостей
% aptitude search '!~i?reverse-depends("^mc$")'
p    mc-data         - Midnight Commander - a powerful file manager -- data files
Показывать только имя пакета
% aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
mc-data                            
Установить зависимости для, например mc
% aptitude search '!~i?reverse-depends("^mc$")' -F "%p" | xargs sudo apt-get install     
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mc-data
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1.166 kB of archives.
After this operation, 5.550 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ wily/universe mc-data all 3:4.8.13-3 [1.166 kB]
Fetched 1.166 kB in 0s (1.250 kB/s)
Selecting previously unselected package mc-data.
(Reading database ... 606748 files and directories currently installed.)
Preparing to unpack .../mc-data_3%3a4.8.13-3_all.deb ...
Unpacking mc-data (3:4.8.13-3) ...
Processing triggers for doc-base (0.10.6) ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Processing triggers for man-db (2.7.4-1) ...
Processing triggers for hicolor-icon-theme (0.15-0ubuntu1) ...
Setting up mc-data (3:4.8.13-3) ...
4
ответ дан 25 May 2018 в 17:20

apt-get build-dep <package> выполнит трюк.

3
ответ дан 25 May 2018 в 17:20
  • 1
    Это не сработает, потому что у пакета есть зависимости от времени выполнения, которые не будут установлены с apt-get build-dep. – Nathan Osman 19 September 2012 в 06:35

Вы можете проанализировать вывод моделирования установки apt для этого, вот вам функция bash:

apt-install-depends() {
    local pkg="$1"
    apt-get install -s "$pkg" \
      | sed -n \
        -e "/^Inst $pkg /d" \
        -e 's/^Inst \([^ ]\+\) .*$/\1/p' \
      | xargs apt-get install
}

Использование:

apt-install-depends mopidy
1
ответ дан 25 May 2018 в 17:20

Чтобы установить только зависимости, вы можете использовать apt-cache show package | grep Depends. Это даст вам список зависимостей:

apt-cache show apache2 | grep Depends
Depends: apache2-mpm-worker (= 2.2.22-6ubuntu5.1) | apache2-mpm-prefork (= 2.2.22-6ubuntu5.1) | apache2-mpm-event (= 2.2.22-6ubuntu5.1) | apache2-mpm-itk (= 2.2.22-6ubuntu5.1), apache2.2-common (= 2.2.22-6ubuntu5.1)

, после чего вы можете решить, какой пакет установить с помощью apt-get. Существует также aptitude в интерактивном режиме, вы ищете пакет, который выберете его, а затем установите его зависимости:

0
ответ дан 25 May 2018 в 17:20

Другие вопросы по тегам:

Похожие вопросы: