Comment installer uniquement les dépendances d'un paquet?


45

En cours d'exécution sudo apt-get install <PACKAGE>, le package, ses dépendances et tous les autres packages recommandés seront installés.

Cependant, il ne semble pas y avoir de moyen d'installer uniquement les dépendances d'un paquet et d'exclure le paquet lui-même.

Comment pourrait-on s'y prendre?


Juste curieux, pourquoi voulez-vous faire cela?
Kris Harper

@ root45: C'est un peu une situation unique: j'ai le code source d'un paquet Python dans le dépôt. et ça ne commence pas. J'ai besoin d'installer les dépendances du paquet sans installer le paquet lui-même (puisque j'ai déjà le code).
Nathan Osman

1
Ne pourriez-vous pas simplement exécuter apt-get install et regarder ce qui va être installé, puis tout installer sauf l'application que vous compilez?
duffydack

2
Ou simplement l'installer puis supprimer l'application (mais pas ses dépendances). Et / ou installez un paquet mis à jour / corrigé après l'avoir construit.
Janvier

J'ai besoin de cette capacité pour pouvoir créer et installer un paquet source qui n'est pas encore construit pour mon architecture. apt-get build-depinstalle les dépendances de construction, donc apt-get -b sourcefonctionne, mais les dépendances d'exécution ne sont pas installées, donc dpkg -i *.debéchoue.
Trevor Robinson

Réponses:


24

Ceci installera tous les packages dans le champ Dépend et PreDepends du paquet :

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

En gros, vous demandez toutes les dépendances, filtrez les (pré) dépendances et formatez cette sortie pour apt-get.

Un problème sont les dépendances comme

Depends: pulseaudio
  pulseaudio:i386

ou des paquets virtuels comme

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

Donc: à utiliser avec précaution - cela ne fonctionne pas dans tous les cas!


1
Il y a beaucoup de cas que cela ne gère pas, par exemple cela va complètement casser sur les paquets virtuels (qui sont imprimés entre crochets). Voir ici pour des exemples: askubuntu.com/questions/25361/…
Trevor Robinson

Merci pour l'allusion, bien que je ne sois pas vraiment sûr de savoir comment gérer toutes ces questions. :-(
htorque

2
Si vous me le permettez, j'aimerais suggérer une solution plus simple avec AWK:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy

1
J'ai rencontré le problème de paquet virtuel que vous avez mentionné ci-dessus; la mise à jour seden cours au suivant a fonctionné pour moi: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. Dans mon cas, le paquet virtuel in < >était précédé par le paquet qui le satisfaisait. La suppression de l'élément < >fonctionnait donc bien.
berto

5

apt-get build-dep <package> fera l'affaire.


13
Cela ne fonctionnera pas car le paquet contient des dépendances d'exécution avec lesquelles il ne sera pas installé apt-get build-dep.
Nathan Osman

5

Si copier / coller ne vous dérange pas, simulez simplement une installation apt-get avec -s. De cette façon, vous verrez quels autres packages seront installés et / ou mis à niveau, puis supprimez simplement le nom du package que vous ne souhaitez pas installer dans cette liste et le tour est joué.

sudo apt-get install -s <package>


4

Pour lister toutes les dépendances d’un paquet donné non installé, vous pouvez utiliser aptitude

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

Pour installer les dépendances

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

Exemples

  • Lister les dépendances

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Afficher uniquement le nom du package

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Installez les dépendances pour, par exemple 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

Vous pouvez analyser la sortie d'une simulation d'installation apt pour le faire, voici une fonction bash à faire pour vous:

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
}

Usage:

apt-install-depends mopidy

0

Pour installer uniquement des dépendances, vous pouvez utiliser apt-cache show package | grep Depends. Cela vous donnera une liste de dépendances:

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)

vous pourrez alors décider quel paquet installer avec apt-get. Il y a aussi aptitudeen mode interactif, vous cherchez le paquet que vous sélectionnez puis installez ses dépendances:

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.