Come installare solo le dipendenze di un pacchetto?


45

In esecuzione sudo apt-get install <PACKAGE>installerà il pacchetto, le sue dipendenze e tutti gli altri pacchetti consigliati.

Tuttavia, non sembra esserci un modo per installare solo le dipendenze di un pacchetto ed escludere il pacchetto stesso.

Come si potrebbe fare per fare questo?


Solo curioso, perché vuoi farlo?
Kris Harper,

@ root45: Beh, è ​​un po 'una situazione unica: ho il codice sorgente di un pacchetto Python nei repository. e non sta iniziando. Devo installare le dipendenze per il pacchetto senza installare il pacchetto stesso (poiché ho già il codice).
Nathan Osman,

1
Non potresti semplicemente eseguire una versione a secco di apt-get install e guardare cosa verrà installato, quindi installare tutto tranne l'app che stai compilando?
Duffydack,

2
O semplicemente installarlo e quindi rimuovere l'applicazione (ma non le sue dipendenze). E / o installa un pacchetto aggiornato / fisso dopo averlo creato.
JanC

Ho bisogno della possibilità di farlo in modo da poter costruire e installare un pacchetto sorgente che non è già stato creato per la mia architettura. apt-get build-depinstalla crea dipendenze, quindi apt-get -b sourcefunziona, ma le dipendenze di runtime non sono installate, quindi dpkg -i *.debfallisce.
Trevor Robinson,

Risposte:


24

Ciò installerà tutti i pacchetti nel campo Depends and PreDepends del pacchetto :

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

Fondamentalmente chiedete tutte le dipendenze, filtrate il (Pre) Depends e formattate l'output per apt-get.

Un problema sono le dipendenze come

Depends: pulseaudio
  pulseaudio:i386

o pacchetti virtuali come

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

Quindi: usare con cura - non funziona in tutti i casi!


1
Ci sono molti casi che questo non gestisce, ad esempio si romperà completamente sui pacchetti virtuali (che sono stampati tra parentesi angolari). Vedi qui per esempi: askubuntu.com/questions/25361/…
Trevor Robinson,

Grazie per il suggerimento, anche se non sono davvero sicuro di come gestire tutti questi problemi. :-(
htorque il

2
Se posso, vorrei suggerire una soluzione più semplice con AWK:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy,

1
Ho riscontrato il problema del pacchetto virtuale che hai citato sopra; aggiornamento sedin cantiere al seguente ha funzionato per me: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. Nel mio caso, il pacchetto virtuale in è < >stato preceduto dal pacchetto che lo soddisfaceva, quindi la rimozione dell'articolo < >funzionava bene.
berto

5

apt-get build-dep <package> farà il trucco.


13
Non funzionerà perché il pacchetto ha dipendenze di runtime con cui non verrà installato apt-get build-dep.
Nathan Osman,

5

Se non ti dispiace copiare / incollare, basta simulare un'installazione apt-get con -s. In questo modo vedrai quali altri pacchetti verranno installati e / o aggiornati, quindi rimuovi semplicemente il nome del pacchetto che non desideri installare da quell'elenco e voilà.

sudo apt-get install -s <package>


4

Per elencare tutte le dipendenze di un determinato pacchetto che non viene installato, è possibile utilizzare aptitude

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

Per installare le dipendenze

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

Esempi

  • Elencare le dipendenze

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Mostra solo il nome del pacchetto

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Installare le dipendenze per, ad es 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

È possibile analizzare l'output di una simulazione di installazione apt per fare questo, ecco una funzione bash per farlo per te:

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
}

Uso:

apt-install-depends mopidy

0

Per installare solo dipendenze, è possibile utilizzare apt-cache show package | grep Depends. Questo ti darà un elenco di dipendenze:

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)

allora puoi decidere quale pacchetto installare con apt-get. Esiste anche aptitudein modalità interattiva, cerchi il pacchetto selezionalo e quindi installa le sue dipendenze:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.