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


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.