Qual è la differenza tra apt-get install e apt-get build-dep?


33

Nella pagina di apt-get man , si trova questo:

installa pkg (s)
Questa opzione è seguita da uno o più pacchetti desiderati per l'installazione. Ogni pacchetto è un nome di pacchetto, non un nome file completo (ad esempio, in un sistema Fedora Core, l'argomento fornito sarebbe glibc, non glibc-2.4.8.i686.rpm).
Tutti i pacchetti richiesti dai pacchetti specificati per l'installazione verranno anche recuperati e installati .
[...]

build-dep source_pkg
Fa sì che apt-get installi / rimuova i pacchetti nel tentativo di soddisfare le dipendenze di compilazione per un pacchetto sorgente.

Sembra che entrambi stiano cercando di soddisfare le dipendenze, ma ho avuto risultati diversi durante l' installazionematplotlib con ciascuno di essi: apt-get intallnon ha funzionato con i miei successivi pip install matplotlibnel mio virtualenv, mentre ha apt-get build-depfatto *.

*Sì, dovevo installarlo matplotlibin un Venv, ma pip non è riuscito a risolvere alcune delle dipendenze, quindi ho usato pigramente apt per risolverlo

Risposte:


39

La versione corta

apt-get install

installa un nuovo pacchetto, risolvendo e scaricando automaticamente i pacchetti dipendenti. Se il pacchetto è installato, prova ad aggiornare alla versione più recente.

apt-get build-dep

Fa in modo che apt-get installi / rimuova i pacchetti nel tentativo di soddisfare le dipendenze di compilazione per un pacchetto sorgente.

Il comando sudo apt-get build-dep packagenamesignifica installare tutte le dipendenze per 'nomepacchetto' in modo che io possa costruirlo ". Quindi build-dep è un comando apt-get proprio come installa, rimuovi, aggiorna, ecc.

Il build-depcomando cerca nei repository locali nel sistema e installa le dipendenze di compilazione per il pacchetto. Se il pacchetto non esiste nel repository locale, verrà restituito un codice di errore.

Per l'installazione di matplotlib, consultare Installazione di matplotlib su Ubuntu

Fonte: ManPage e Ravi Saive


19

La differenza è se le dipendenze sono necessarie in fase di esecuzione anziché in fase di compilazione .

Ad esempio, forse sto costruendo un binario che utilizza openssl. Al momento della compilazione avrei bisogno dei file di intestazione openssl, che sono presenti libssl-dev. Vorrei quindi elencarlo come a Build-Depends.

Tuttavia, il binario e il pacchetto risultanti non richiedono l'intestazione e altri file di sviluppo, quindi al momento dell'installazione non ho bisogno libssl-dev. Non ci sarebbe Depends, quindi. Ma libssl, la libreria di runtime a cui il mio binario era collegato, avrebbe dovuto trovarsi Depends.

Le sezioni man che hai citato indicano questo (parla di "soddisfare le dipendenze di build " di un pacchetto), ma senza una conoscenza preliminare di quando vengono utilizzati Build-Depends, questo può essere fonte di confusione.

Dai un'occhiata alla guida alle politiche di Debian per le definizioni dei campi dei file di controllo:

http://www.debian.org/doc/debian-policy/ch-controlfields.html

ecco la sezione su Build-Depends. Nota che è sotto l' intestazione "dipendenze per i pacchetti di origine ":

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-sourcebinarydeps

E questo parla di Dipende. Nota 'sotto l' intestazione dei pacchetti binari :

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps


Grazie. Sembra che avrei bisogno di build-dep per la costruzione di una libreria dalla fonte .. secondo la tua descrizione.
kchoi,
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.