केवल पैकेज की निर्भरता कैसे स्थापित करें?


45

रनिंग sudo apt-get install <PACKAGE>पैकेज, इसकी निर्भरता और किसी अन्य अनुशंसित पैकेज को स्थापित करेगा।

हालांकि, पैकेज की केवल निर्भरता को स्थापित करने और पैकेज को स्वयं बाहर करने का कोई तरीका प्रतीत नहीं होता है।

ऐसा करने के बारे में कोई कैसे जाएगा?


बस जिज्ञासु, आप ऐसा क्यों करना चाहते हैं?
क्रिश हार्पर

@ root45: वैसे यह एक अनोखी स्थिति का एक सा है: मेरे पास रेपो में एक पायथन पैकेज का सोर्स कोड है। और यह शुरू नहीं हो रहा है। मुझे पैकेज को स्थापित किए बिना पैकेज के लिए निर्भरताएं स्थापित करने की आवश्यकता है (क्योंकि मेरे पास पहले से ही कोड है)।
नाथन उस्मान

1
क्या आप सिर्फ apt-get इंस्टॉल का ड्राई-रन नहीं कर सकते हैं और यह देख सकते हैं कि क्या इंस्टॉल होने जा रहा है, तो बस सब कुछ इंस्टॉल करें लेकिन जिस ऐप को आप कंपेयर कर रहे हैं?
duffydack

2
या बस इसे स्थापित करें और फिर एप्लिकेशन को हटा दें (लेकिन इसकी निर्भरता नहीं)। और / या एक अद्यतन / तय पैकेज स्थापित करने के बाद इसे स्थापित करें।
JanC

मुझे ऐसा करने की क्षमता की आवश्यकता है इसलिए मैं एक स्रोत पैकेज का निर्माण और स्थापित कर सकता हूं जो पहले से ही मेरी वास्तुकला के लिए नहीं बनाया गया है। apt-get build-depइंस्टॉल निर्भरता का निर्माण करता है, इसलिए apt-get -b sourceकाम करता है, लेकिन रनटाइम निर्भरता स्थापित नहीं होती है, इसलिए dpkg -i *.debविफल रहता है।
ट्रेवर रॉबिन्सन

जवाबों:


24

इस पैकेज के सभी संकुल स्थापित हो जाएगा निर्भर करता है और PreDepends क्षेत्र:

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

मूल रूप से आप सभी निर्भरता के लिए पूछते हैं, (पूर्व) निर्भर करता है , और उस आउटपुट को प्रारूपित करें जो apt-get के लिए आउटपुट करता है

एक समस्या निर्भरता की तरह है

Depends: pulseaudio
  pulseaudio:i386

या वर्चुअल पैकेज पसंद करते हैं

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

तो: देखभाल के साथ उपयोग करें - यह सभी मामलों में काम नहीं करता है!


1
ऐसे बहुत से मामले हैं जो इसे संभाल नहीं पाते हैं, उदाहरण के लिए यह पूरी तरह से आभासी पैकेजों पर टूट जाएगा (जो कोण कोष्ठक में मुद्रित होते हैं)। उदाहरण के लिए यहाँ देखें: askubuntu.com/questions/25361/…
ट्रेवर रॉबिन्सन

संकेत के लिए धन्यवाद, हालांकि मुझे यकीन नहीं है कि उन सभी मुद्दों को कैसे संभालना है। :-(
htorque

2
अगर मैं करूं, तो मैं AWK के साथ सरल समाधान सुझाना चाहूंगा:sudo apt-get install $(apt-cache depends PACKAGE-NAME-HERE | awk '$1~/Depends/{printf $2" "}')
सर्गि कोलोडियाज़नी

1
मैं आपके द्वारा उल्लिखित वर्चुअल पैकेज मुद्दे में भाग गया; sedनिम्नलिखित में पाइपलाइन में अद्यतन करना मेरे लिए काम किया sed -e "s/.*ends:\ //" -e 's/<[^>]*>//':। मेरे मामले में, वर्चुअल पैकेज पैकेज से < >पहले इसे संतुष्ट करता था, इसलिए आइटम को < >ठीक काम में हटा दिया ।
बर्टो

5

apt-get build-dep <package> चाल चलेगा।


13
यह काम नहीं करेगा क्योंकि पैकेज में रनटाइम निर्भरताएँ हैं जिन्हें स्थापित नहीं किया जाएगा apt-get build-dep
नाथन उस्मान

5

यदि आपको कॉपी / पास्ट से ऐतराज नहीं है, तो केवल apt-get install का अनुकरण करें -s। इस तरह आप देखेंगे कि कौन से अन्य पैकेज स्थापित हो जाएंगे और / या अपग्रेड हो जाएंगे, फिर आप उस पैकेज का नाम हटा दें जिसे आप उस सूची और वॉइला से इंस्टॉल नहीं करना चाहते हैं।

sudo apt-get install -s <package>


4

किसी दिए गए पैकेज की सभी निर्भरता को सूचीबद्ध नहीं करने के लिए, आप उपयोग कर सकते हैं aptitude

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

निर्भरता स्थापित करने के लिए

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

उदाहरण

  • निर्भरता सूची

    % aptitude search '!~i?reverse-depends("^mc$")'
    p    mc-data         - Midnight Commander - a powerful file manager -- data files
    
  • केवल पैकेज का नाम दिखाएं

    % aptitude search '!~i?reverse-depends("^mc$")' -F "%p"
    mc-data                            
    
  • के लिए निर्भरता स्थापित करें, जैसे 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

आप ऐसा करने के लिए एक उपयुक्त इंस्टॉल सिमुलेशन के आउटपुट को पार्स कर सकते हैं, यहाँ आपके लिए ऐसा करने के लिए एक bash फ़ंक्शन है:

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
}

उपयोग:

apt-install-depends mopidy

0

केवल निर्भरता स्थापित करने के लिए, आप उपयोग कर सकते हैं apt-cache show package | grep Depends। यह आपको निर्भरता की एक सूची देगा:

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)

तब आप यह तय कर सकते हैं कि कौन सा पैकेज apt-get के साथ स्थापित है। aptitudeइंटरेक्टिव मोड में भी है, आप पैकेज का चयन करें इसे चुनें और फिर यह निर्भरताएं स्थापित करें:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.