अप्रयुक्त MacPorts पैकेज कैसे निकालें?


94

जब भी मैं MacPorts के माध्यम से एक प्रोग्राम स्थापित करता हूं, यह बहुत सारी निर्भरता प्राप्त करता है और स्थापित करता है। जब मैंने कहा प्रोग्राम को अनइंस्टॉल कर दिया, तो मैं मैकपोर्ट्स को कैसे पुन: उपयोग कर सकता हूं इसके साथ सभी अप्रयुक्त निर्भरताएं हटा दें?

जवाबों:


105

अकस्मात पत्तों को काटने से बचने के लिए जो आपके द्वारा अनुरोधित चीजें हो सकती हैं जिन्हें आपको port_cutleavesपैकेज स्थापित करना चाहिए फिर https://guide.macports.org/#using.common-tasks.keeplean पर चलें।sudo port_cutleaves


MacPorts 1.9.0 ने जोड़ाsqlite portdbformat और MacPorts 2.0.0 ने पुराने flatप्रारूप को छोड़ दियाsqliteबंदरगाह डीबी प्रारूप नए प्रतिष्ठानों के लिए डिफ़ॉल्ट है; पुराने इंस्टॉलेशन जिन्हें 1.9.x पर अपग्रेड किया गया था वे flatफॉर्मेट 1 का उपयोग करना जारी रखेंगे । आप एक 1.9.x परिवर्तित कर सकते हैं flatकरने के लिए प्रणाली sqliteMacPorts 2.0 पर अपग्रेड करके या बदलकर प्रारूप portdbformatमें मूल्य /opt/local/etc/macports/macports.confऔर फिर एक पत्र जारी करने बंदरगाह जड़ (जैसे के रूप में आदेश sudo port installed)।

नए प्रारूप की विशेषताओं में से एक यह है कि यह "अनुरोधित" बनाम "अप्रतिबंधित" पोर्ट प्रतिष्ठानों का ट्रैक रखता है। एक निर्विवाद बंदरगाह वह है जो केवल इसलिए स्थापित किया गया था क्योंकि कुछ अन्य बंदरगाह उस पर निर्भर थे। leavesछद्म PORTNAME सभी अनिवेदित बंदरगाहों जिस पर कोई अन्य स्थापित बंदरगाह निर्भर करता है के लिए फैलता है। यदि आप मूल रूप से उन्हें अनइंस्टॉल नहीं करते हैं sudo port uninstall --follow-dependencies portname(जो आप चाहते हैं वही करेंगे, लेकिन केवल तभी जब आप किसी चीज़ की स्थापना रद्द करने के लिए उपयोग करना याद रखें)


उनमें से किसी को भी अनइंस्टॉल करने से पहले आपको अपने मौजूदा पत्तों की जांच करनी चाहिए।

port echo leaves

कुछ आम के पत्तों ( automake, gperf, libtool, pkgconfig) का निर्माण समय आम बंदरगाहों में से निर्भरता है, तो आप "अनुरोध" उन्हें (कर सकते हैं कर रहे हैं sudo port setrequested port1 port2 port3 …) उन्हें स्थापना रद्द करने से बचने के लिए सिर्फ उन्हें बाद में पुनः स्थापित करने के लिए।

आप किसी भी शेष पत्तियों को आसानी से अनइंस्टॉल कर सकते हैं:

sudo port uninstall leaves

नोट: अपने पत्तों की छंटाई करने से पहले, आप उन पुराने संस्करणों की स्थापना रद्द करना चाह सकते हैं जो अब "सक्रिय" नहीं हैं। यह कुछ और पत्तों को प्रकट कर सकता है (अर्थात पोर्ट जो कि स्थापित किए गए पोर्ट की निर्भरता हैं, लेकिन निष्क्रिय हैं):

sudo port uninstall inactive

रहे हैं कई वर्गों में MacPorts गाइड है कि यह भी उपयोग करने की प्रक्रिया का वर्णन leavesअनावश्यक बंदरगाहों की स्थापना रद्द करने के लिए।


11
धन्यवाद। यह काफी मददगार है। ऐसा लगता है कि आपको यह सुनिश्चित करने के लिए कई बार बैक-टू-ईक पत्तों को चलाना होगा और पत्तियों को अनइंस्टॉल करना होगा ताकि सभी पत्ते साफ हो जाएं। इससे पहले कि मैं इको पत्ते खाली परिणाम लौटाता हूं, मैं कम से कम 4 बार दोनों आदेशों को चलाता हूं
एंटनी

6
आप कुछ कह सकते हैं while sudo port uninstall leaves; do :; doneकि स्वचालित करने के लिए।
टॉम एंडरसन

2
@ क्रिसहॉन्सेन sudo port uninstall --follow-dependents portnameगलत है, क्योंकि --follow-dependents"निर्दिष्ट पोर्ट पर निर्भर सभी पोर्ट को पुन: इंस्टॉल करेगा"। यहाँ सही विकल्प है --follow-dependencies, जो "निर्दिष्ट पोर्ट पर निर्भर सभी पोर्ट की पुन: स्थापना करेगा। यह उन निर्भरता को अनइंस्टॉल नहीं करेगा जो अनुरोध के रूप में चिह्नित हैं या जिनके अन्य आश्रित हैं।"
TachyonVortex

8

डॉक्स से :

स्थापना रद्द क्रिया स्थापित पोर्ट की स्थापना रद्द करेगी।

%% sudo port uninstall vile Note

दिए गए पोर्ट पर निर्भर करता है कि ‑‑follow‑dependenciesध्वज का उपयोग करें, इन पोर्ट की स्थापना रद्द करने के लिए भी । यह निर्भरता की स्थापना रद्द नहीं करेगा जो अनुरोध के रूप में चिह्नित हैं या जिनके पास अन्य आश्रित हैं।

पोर्ट को अनइंस्टॉल करने से पहले दिए गए पोर्ट पर निर्भर सभी पोर्ट को फिर से अनइंस्टॉल करने के लिए, का उपयोग करें ‑‑follow‑dependents flag

यदि कोई पोर्ट किसी अन्य इंस्टॉल किए गए पोर्ट की निर्भरता है, तो इसे तब तक अनइंस्टॉल नहीं किया जाएगा, जब तक कि आप पहले निर्भर पोर्ट को नहीं हटाते हैं। इस व्यवहार को ओवरराइड करने के लिए, -f (बल) स्विच का उपयोग करें। यह स्पष्ट रूप से आश्रितों को तोड़ देगा। जब तक आप जानते हैं कि आप क्या कर रहे हैं, तब तक पोर्ट की स्थापना रद्द न करें।

%% sudo port -f uninstall vile

अंतिम अनुच्छेद में प्रमुख चेतावनी पर ध्यान दें। निर्भरताएं बिल्कुल वैसी ही हैं- निर्भरताएं- और अलग-अलग ऐप्स (वसीयत) को एक ही निर्भरता की आवश्यकता हो सकती है।


मुझे नहीं लगता कि यह सवाल का जवाब देता है। ओपी एक कार्यक्रम और इसके लिए आवश्यक चीजों को हटाना चाहता है, न कि किसी कार्यक्रम और इसके लिए आवश्यक चीजों को हटाना।

2
@ मांकॉफ़: ‑‑follow‑dependenciesबनाम ‑‑follow‑dependents; उद्धृत मार्ग दोनों का वर्णन करता है, लेकिन केवल पहला सवाल पर लागू होता है
क्रिस जॉन्सन

3
व्यक्तिगत रूप से, मुझे लगता है कि टीआई महान है कि फिलिप दोनों मापदंडों की व्याख्या करता है, इसलिए हम इस तरह के आदेश जारी करने पर मापदंडों और उनके निहितार्थ से पूरी तरह से अवगत हैं
एंटनी

3

एक पोर्ट और उसके आश्रितों को हटाने का आदेश है:

sudo port uninstall foo --follow-dependents

हालाँकि, यदि आप जिस पोर्ट को अनइंस्टॉल कर रहे हैं, उसमें आश्रित हैं तो यह -f(बल) ध्वज के बिना अनइंस्टॉल नहीं होगा ।

बेशक आपको MacPorts गाइड को विशेष रूप से अनइंस्टॉल गाइड सेक्शन में देखकर पढ़ना शुरू करना चाहिए


3

MacPorts की कंट्रिब डायरेक्टरी में एक स्क्रिप्ट भी है जिसे port_cutleaves कहा जाता है जिसे आप अनावश्यक निर्भरता को दूर करने के लिए चला सकते हैं: http://trac.macports.org/browser/contrib/ । यह आपको प्रत्येक से-अनइंस्टॉल किए गए पोर्ट के लिए पूछेगा और कुछ को रखने की अनुमति देता है, क्या आपको चाहिए।


2

मैंने पोर्ट क्लीनअप को स्वचालित करने के लिए कुछ स्क्रिप्ट लिखी हैं: https://github.com/vasi/macports-tools

'Macportsfoster' स्क्रिप्ट अनुरोधित-सूची में किसी भी चीज की आवश्यकता वाले सभी बंदरगाहों की सूची का उत्पादन नहीं करेगा, इस तरह का आदेश दिया गया है कि 'port $ $ (macportsfoster)' इन सभी को एक शॉट में हटा देगा।


1

मुझे लगता है कि अन्य उत्तर, और --follow-dependentsध्वज, जो आप चाहते हैं वह मत करो। यदि आप स्थापित करते हैं A, और Aआवश्यकता होती है B, तो अद्भुत पैकेज प्रबंधन प्रणालियों के लिए धन्यवाद, Bआपके लिए स्थापित किया जाएगा। आप अनइंस्टॉल कर सकते हैं Bऔर --follow-dependentsझंडे को इसके बारे में पता चल जाएगा A। लेकिन क्या होगा अगर आप अनइंस्टॉल करते हैं A, जो कि अधिक संभावना है, क्योंकि Aक्या आप मैन्युअल रूप से पहली जगह में स्थापित हैं? इस मामले में Bपीछे रह जाता है।

यदि आप फ़िंक का उपयोग करते हैं, तो डेबस्टर पैकेज आपके सिस्टम को साफ करने और अप्रयुक्त निर्भरता को हटाने के लिए डिज़ाइन किया गया है।

Debfoster आपको पैकेज से छुटकारा पाने में मदद करेगा (उदाहरण के लिए पुस्तकालय) आपके सिस्टम पर पीछे छूट जाता है जब आवश्यक प्रोग्राम को हटा दिया जाता है या उस संस्करण में अपग्रेड किया जाता है जिसमें निर्भरता नहीं होती है।

जबकि debfosterMacPorts के लिए काम नहीं करेगा, वहाँ के बंदरगाहों प्रतीत होता है debfoster, उदाहरण के लिए portsfoster, हालांकि यह बंद किया जा रहा है ...

MacPorts के लिए वर्तमान में कोई समाधान मौजूद नहीं है।


लेकिन डेबियन आधारित सिस्टम पर डेब फाइल के लिए डेबस्टर नहीं है? मैं मैक ओएस एक्स पर मैकपोर्ट पोर्ट के लिए इसका उपयोग कैसे करूं?
हपी

इसे OS X और MacPorts में पोर्ट किया गया है और फिन्क उस aptसिस्टम पर आधारित है जो डेबियन द्वारा उपयोग किया जाता है। मैं MacPorts का उपयोग नहीं करता, लेकिन मैंने किया fink install debfosterऔर यह मेरे लिए ठीक काम किया।

MacPorts aptसिस्टम से संबंधित नहीं है और debफ़ाइलों का उपयोग नहीं करता है । MacPorts का विचार FreeBSD पोर्ट या NetBSD pkgsrc से संबंधित है, लेकिन कार्यान्वयन बहुत अलग है।
क्रिस जॉन्सन

1
ठीक। सुधारों के लिए धन्यवाद। भले ही, debfoster के माध्यम से ठीक काम करने के लिए रखी गई है fink। आगे की खोज से पता चलता है कि यह MacPorts के साथ काम नहीं करता है , लेकिन क्लोन हैं, उदाहरण के लिए, देखेंportsfoster
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.