Як встановити лише залежності пакету?


45

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

Однак, мабуть, не існує способу встановити лише залежності пакету та виключити сам пакет.

Як би можна було робити це?


Просто цікаво, чому ти хочеш це робити?
— Кріс Харпер

@ root45: Ну це трохи унікальна ситуація: у мене є вихідний код пакету Python у репост. і це не починається. Мені потрібно встановити залежності для пакета, не встановлюючи сам пакет (оскільки у мене вже є код).
— Натан Осман

1
Не могли б ви просто виконати встановлення apt-get і поглянути на те, що буде встановлено, а потім просто встановити все, крім програми, яку ви збираєте?
— duffydack

2
Або просто встановіть його, а потім видаліть додаток (але не його залежність). І / або встановити оновлений / фіксований пакет після його створення.
— JanC

Мені потрібна можливість зробити це, щоб я міг створити та встановити вихідний пакет, який ще не побудований для моєї архітектури. apt-get build-depвстановлення будує залежності, тому apt-get -b sourceпрацює, але залежності часу виконання не встановлюються, тому dpkg -i *.debне вдається.
— Тревор Робінсон

Відповіді:


24

Це дозволить встановити всі пакунки в полі залежно та попередньо :

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

В основному ви запитуєте всі залежності, фільтруєте (Попередньо) залежно та форматуєте результат для apt-get.

Однією із проблем є такі залежності

Depends: pulseaudio
  pulseaudio:i386

або віртуальні пакети на зразок

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

Отже: використовуйте обережно - це працює не у всіх випадках!


1
Є багато випадків, з якими це не вдається, наприклад, він повністю розбивається на віртуальні пакунки (які друкуються у кутових дужках). Дивіться приклади тут: askubuntu.com/questions/25361/…
— Тревор Робінсон,

Дякую за підказку, хоча я не дуже впевнений, як вирішувати всі ці проблеми. :-(
— htorque

2
Якщо я можу, я хотів би запропонувати більш просте рішення з AWK:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
— Сергій Колодяжний

1
Я зіткнувся з проблемою віртуального пакета, яку ви згадали вище; оновлення sedв трубопроводі до наступного працював для мене sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. У моєму випадку віртуальний пакунок у < >передував пакунку, який його задовольняв, тому видалення продукту < >спрацювало нормально.
— Берто

5

apt-get build-dep <package> зробить трюк.


13
Це не спрацює, оскільки пакет має залежність від виконання, яку не буде встановлено apt-get build-dep.
— Натан Осман

5

Якщо ви не заперечуєте проти копіювання / минулого, просто імітуйте програму apt-get -s. Таким чином ви побачите, які ще пакети будуть встановлені та / або оновлені, тоді ви просто видаліть назву пакета, яку ви не хочете встановлювати, зі списку та вуаля.

sudo apt-get install -s <package>


4

Щоб перелічити всі залежності певного пакету, що не встановлюється, ви можете використовувати 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) ...
    

1

Ви можете проаналізувати вихід симуляції влучної установки, щоб зробити це, ось функція 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

0

Щоб встановити лише залежності, ви можете використовувати 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інтерактивний режим, ви шукаєте пакет, вибираєте його, а потім встановлюєте його залежності:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.