Bagaimana cara menginstal hanya dependensi suatu paket?

45

Menjalankan sudo apt-get install <PACKAGE>akan menginstal paket, dependensinya, dan paket yang direkomendasikan lainnya.

Namun, sepertinya tidak ada cara untuk menginstal hanya dependensi paket dan mengecualikan paket itu sendiri.

Bagaimana cara melakukan ini?

Nathan Osman
sumber
Hanya ingin tahu, mengapa Anda ingin melakukan ini?
Kris Harper
@ root45: Yah itu sedikit situasi yang unik: Saya punya kode sumber ke paket Python di repos. dan itu tidak dimulai. Saya perlu menginstal dependensi untuk paket tanpa menginstal paket itu sendiri (karena saya sudah memiliki kode).
Nathan Osman
1
Tidak bisakah Anda hanya menjalankan instalasi apt-get dan melihat apa yang akan diinstal, kemudian instal semuanya kecuali aplikasi yang Anda kompilasi?
duffydack
2
Atau cukup instal lalu hapus aplikasi (tetapi tidak dependensinya). Dan / atau instal paket yang diperbarui / diperbaiki setelah membangunnya.
JanC
Saya memerlukan kemampuan untuk melakukan ini sehingga saya dapat membangun dan menginstal paket sumber yang belum dibangun untuk arsitektur saya. apt-get build-depinstal dependensi build, apt-get -b sourceberfungsi, tetapi dependensi runtime tidak diinstal, jadi dpkg -i *.debgagal.
Trevor Robinson

Jawaban:

24

Ini akan menginstal semua paket di bidang Depends and PreDepends paket :

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

Pada dasarnya Anda meminta semua dependensi, memfilter (Pre) Depends , dan memformat output untuk apt-get.

Satu masalah adalah ketergantungan seperti

Depends: pulseaudio
  pulseaudio:i386

atau paket virtual suka

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

Jadi: gunakan dengan hati-hati - itu tidak bekerja dalam semua kasus!

htorque
sumber
1
Ada banyak kasus yang tidak ditangani, misalnya ia akan benar-benar rusak pada paket virtual (yang dicetak dalam kurung sudut). Lihat di sini untuk contoh: askubuntu.com/questions/25361/…
Trevor Robinson
Terima kasih atas petunjuknya, meskipun saya tidak begitu yakin bagaimana menangani semua masalah itu. :-(
htorque
2
Jika saya boleh, saya ingin menyarankan solusi yang lebih sederhana dengan AWK:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
Sergiy Kolodyazhnyy
1
Saya mengalami masalah paket virtual yang Anda sebutkan di atas; memperbarui seddalam pipa dengan berikut ini bekerja untuk saya: sed -e "s/.*ends:\ //" -e 's/<[^>]*>//'. Dalam kasus saya, paket virtual di < >didahului oleh paket yang memuaskan, jadi menghapus item dalam < >berfungsi dengan baik.
berto
5

apt-get build-dep <package> akan melakukan trik.

Laudeci
sumber
13
Itu tidak akan berfungsi karena paket memiliki dependensi runtime yang tidak akan diinstal dengan apt-get build-dep.
Nathan Osman
5

Jika Anda tidak keberatan menyalin / melewatinya, simulasikan saja pemasangan apt-get -s. Dengan begitu Anda akan melihat paket mana yang akan diinstal dan / atau ditingkatkan, kemudian Anda cukup menghapus nama paket yang tidak ingin Anda instal dari daftar itu dan voila.

sudo apt-get install -s <package>

bksunday
sumber
4

Untuk daftar semua dependensi dari paket yang diberikan tidak diinstal, Anda dapat menggunakan aptitude

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

Untuk menginstal dependensi

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

Contohnya

  • Daftar dependensi

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • Hanya tampilkan nama paket

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • Instal dependensi untuk, mis 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) ...
    
AB
sumber
1

Anda dapat mem-parsing output dari simulasi pemasangan yang tepat untuk melakukan ini, inilah fungsi bash untuk melakukannya untuk Anda:

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
}

Pemakaian:

apt-install-depends mopidy
trevorjay
sumber
0

Untuk menginstal dependensi saja, Anda dapat menggunakan apt-cache show package | grep Depends. Ini akan memberi Anda daftar dependensi:

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)

maka Anda dapat memutuskan paket apa yang diinstal dengan apt-get. Ada juga aptitudedalam mode interaktif, Anda mencari paket memilihnya dan kemudian menginstal dependensinya:

masukkan deskripsi gambar di sini

Braiam
sumber