Was ist der Unterschied zwischen apt-get install und apt-get build-dep?

33

Auf der apt-get man's Seite findet man dies:

install pkg (s) Auf
diese Option folgen ein oder mehrere Pakete, die für die Installation benötigt werden. Jedes Paket ist ein Paketname und kein vollständig qualifizierter Dateiname (in einem Fedora Core-System wäre beispielsweise glibc das angegebene Argument, nicht glibc-2.4.8.i686.rpm).
Alle Pakete, die von den für die Installation angegebenen Paketen benötigt werden, werden ebenfalls abgerufen und installiert .
[...]

build-dep source_pkg
Verursacht, dass apt-get Pakete installiert / entfernt , um die Build-Abhängigkeiten für ein Quellpaket zu erfüllen .

Es hört sich so an, als ob beide versuchen, Abhängigkeiten zu befriedigen, aber ich hatte unterschiedliche Ergebnisse bei der Installationmatplotlib : Funktionierte apt-get intallnicht mit meinem nachfolgenden pip install matplotlibin meinem virtuellen Env, während apt-get build-dep*.

*Ja, ich musste matplotlibin einem Venv installieren , aber Pip konnte einige der Abhängigkeiten nicht auflösen, also habe ich apt faul verwendet, um es zu lösen

Anto
quelle

Antworten:

39

Die kurze Version.

apt-get install

Installiert ein neues Paket, wobei abhängige Pakete automatisch aufgelöst und heruntergeladen werden. Wenn das Paket installiert ist, versuchen Sie, auf die neueste Version zu aktualisieren.

apt-get build-dep

Bewirkt, dass apt-get Pakete installiert / entfernt, um die Build-Abhängigkeiten für ein Quellpaket zu erfüllen.

Der Befehl sudo apt-get build-dep packagenamebedeutet, alle Abhängigkeiten für 'packagename' zu installieren, damit ich sie erstellen kann. "Build-dep ist also ein apt-get-Befehl wie install, remove, update usw.

Der build-depBefehl durchsucht die lokalen Repositorys im System und installiert die Build-Abhängigkeiten für das Paket. Wenn das Paket nicht im lokalen Repository vorhanden ist, wird ein Fehlercode zurückgegeben.

Informationen zum Installieren von matplotlib finden Sie unter So installieren Sie matplotlib unter Ubuntu

Quelle: ManPage & Ravi Saive

Mitch
quelle
19

Der Unterschied besteht darin, ob die Abhängigkeiten zur Laufzeit und nicht zur Build-Zeit benötigt werden .

Zum Beispiel baue ich vielleicht eine Binärdatei, die openssl verwendet. Zum Zeitpunkt der Erstellung würde ich die OpenSSL-Header-Dateien benötigen, die in sind libssl-dev. Ich würde dies dann als Build-Depends.

Die resultierende Binärdatei und das resultierende Paket benötigen jedoch weder den Header noch andere Entwicklungsdateien. Daher benötige ich zum Zeitpunkt der Installation keine libssl-dev. DependsDann wäre es nicht drin . Aber libssldie Laufzeitbibliothek, gegen die meine Binärdatei verlinkt ist, müsste sich in befinden Depends.

Die von Ihnen zitierten Man-Abschnitte weisen darauf hin (es handelt sich um "Erfüllen der Build- Abhängigkeiten" eines Pakets), aber ohne vorherige Kenntnis der Verwendung von Build-Depends kann dies verwirrend sein.

Werfen Sie einen Blick auf den Debian-Richtlinienleitfaden für die Definition von Kontrolldateifeldern:

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

Hier ist der Abschnitt über Build-Depends. Beachten Sie, es ist unter den „Abhängigkeiten für Quellpakete“ Header:

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

Und hier geht es um Depends. Beachten Sie das 'unter der Überschrift Binärpakete :

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

Roadmr
quelle
Vielen Dank. Es scheint, als müsste ich ein Build-Dep erstellen, um eine Bibliothek aus dem Quellcode zu erstellen.
Kchoi