Jaka jest różnica między apt-get install a apt-get build-dep?

33

Na stronie apt-get man można znaleźć:

zainstaluj pkg (s) Po
tej opcji następuje jeden lub więcej pakietów wymaganych do instalacji. Każdy pakiet jest nazwą pakietu, a nie w pełni kwalifikowaną nazwą pliku (na przykład w systemie Fedora Core glibc byłby podanym argumentem, a nie glibc-2.4.8.i686.rpm).
Wszystkie pakiety wymagane przez pakiety określone do instalacji również zostaną pobrane i zainstalowane .
[...]

build-dep source_pkg
Powoduje, że apt-get instaluje / usuwa pakiety, próbując spełnić zależności kompilacji dla pakietu źródłowego.

To brzmi jak oba te starają się spełnić zależności, ale miałem różne wyniki podczas instalowaniamatplotlib z każdym z tych: apt-get intallnie działa z moim kolejny pip install matplotlibw moim virtualenv, a apt-get build-depto *.

*Tak, musiałem zainstalować matplotlibw venv, ale pip nie mógł rozwiązać niektórych zależności, więc leniwie użyłem apt, aby go rozwiązać

Anto
źródło

Odpowiedzi:

39

Krótka wersja.

apt-get install

instaluje nowy pakiet, automatycznie rozwiązując i pobierając pakiety zależne. Jeśli pakiet jest zainstalowany, spróbuj uaktualnić do najnowszej wersji.

apt-get build-dep

Powoduje, że apt-get instaluje / usuwa pakiety, próbując spełnić zależności kompilacji dla pakietu źródłowego.

Polecenie sudo apt-get build-dep packagenameoznacza zainstalowanie wszystkich zależności dla „nazwa-pakietu”, abym mógł go zbudować. Więc build-dep to polecenie apt-get, podobnie jak instaluj, usuwaj, aktualizuj itp.

build-depPolecenie przeszukuje lokalnych repozytoriów w systemie i zainstalować zależności budowania pakietu. Jeśli pakiet nie istnieje w lokalnym repozytorium, zwróci kod błędu.

Aby zainstalować matplotlib, zobacz Aby zainstalować matplotlib na Ubuntu

Źródło: ManPage i Ravi Saive

Mitch
źródło
19

Różnica polega na tym, czy potrzebne są zależnościami w czasie wykonywania , a nie na buildtime .

Na przykład, może buduję plik binarny, który używa openssl. Podczas kompilacji potrzebowałbym plików nagłówkowych openssl, które są w libssl-dev. Następnie wymieniłbym to jako Build-Depends.

Jednak wynikowy plik binarny i pakiet nie potrzebują nagłówka ani innych plików programistycznych, więc w czasie instalacji nie potrzebuję libssl-dev. Nie byłoby go Dependswtedy. Ale libsslbiblioteka środowiska wykonawczego, z którą połączono mój plik binarny, musiałaby być w nim zainstalowana Depends.

Sekcje man, które zacytowałeś, wskazują na to (mówi o „spełnieniu zależności kompilacji ” pakietu), ale bez wcześniejszej wiedzy o tym, kiedy używane są kompilacje, może to być mylące.

Zajrzyj do przewodnika po zasadach Debiana, aby uzyskać definicje pól plików kontrolnych:

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

oto sekcja poświęcona kompilacji. Uwaga: znajduje się pod nagłówkiem „zależności dla pakietów źródłowych ”:

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

A ten mówi o Zależności. Uwaga jego „pod nagłówkiem Pakiety binarne :

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

roadmr
źródło
Dzięki. Wygląda na to, że potrzebowałbym build-dep do budowy biblioteki ze źródła .. zgodnie z twoim opisem.
kchoi