मैं कैबल पैकेज के संस्करण को कैसे अनइंस्टॉल कर सकता हूं?


82

हैपस्टैक लाइट मुझ पर टूट रहा है क्योंकि यह ब्लेज़-एचटीएमएल संस्करण 0.5 प्राप्त कर रहा है और यह संस्करण 0.4 चाहता है। कैबल का कहना है कि दोनों संस्करण 0.4.3.4 और 0.5.0.0 स्थापित हैं। मैं 0.5.0.0 को निकालना चाहता हूं और सिर्फ पुराने संस्करण का उपयोग करना चाहता हूं। लेकिन कैबल में "अनइंस्टॉल" कमांड नहीं है, और जब मैं कोशिश करता हूं ghc-pkg unregister --force blaze-html, तो ghc-pkgकहता है कि मेरे आदेश को नजरअंदाज कर दिया गया है।

मैं क्या करूं?

अद्यतन : यह विश्वास नहीं है । हालाँकि ghc-pkgकमांड को अनदेखा करने का दावा किया जाता है, लेकिन कमांड को अनदेखा नहीं किया जाता है। और डॉन स्टीवर्ट के स्वीकृत जवाब के साथ आप बिल्कुल वही संस्करण निकाल सकते हैं जिसे आप समाप्त करना चाहते हैं।


2
ghc-pkg list blaze-html? क्या आप वाकई इसे सही उपयोगकर्ता के रूप में चला रहे हैं? शायद स्पष्ट रूप से अपंजीकृत होने के लिए संस्करण का वर्णन करें?
ivanm

1
@ivanm पूछने के लिए धन्यवाद। बारी-बारी से बाहर ghc-pkg झूठ बोला था मेरे लिए!
नॉर्मन रैमसे

का डुप्लिकेट की क्रमबद्ध stackoverflow.com/questions/7252193/... , लेकिन मैं झंडा करने के लिए अनिच्छुक हूँ यह इस एक के बेहतर :) क्योंकि
बेन Millwood

1
अनाथ पैकेज खोजने और निकालने के लिए कैबल-डिलीट बहुत अच्छा है।
तोबू

@Tobu cabal-uninstall नीचे दिए गए उत्तर में क्या कहा गया है ? क्या कैबल-डिलीट अधिक शक्तिशाली है? क्या यह कैबेल सैंडबॉक्स के साथ काम कर सकता है ( cabal exec -- cabal-deleteसही तरीके से काम करेगा और सैंडबॉक्स से पैकेज को हटा देगा )? क्यों नहीं यह एक जवाब है, भी? यह एक अच्छा उपकरण की तरह दिखता है।
इम्ज़ - इवान ज़खरीशेव

जवाबों:


95

आप ghc-pkg unregisterएक विशिष्ट संस्करण को पसंद कर सकते हैं , जैसे:

$ ghc-pkg unregister --force regex-compat-0.95.1

यह पर्याप्त होना चाहिए।


18
एक बार अपंजीकृत होने के बाद, क्या कोई फाइल कहीं आसपास पड़ी है, जिसे काट दिया जाना चाहिए?
एरिक कपलुन

अन्य स्थानों की टिप्पणियों में उल्लेख किया गया है कि ghc-pkg फोल्डर को चारों ओर छोड़ देता है?
CMCDragonkai

अपने में एक नजर है ~/.cabal/के बारे में जानकारी के लिए फ़ोल्डर है जहाँ pkgs और बाइनरी हैं
Leahcim

23

यदि आप सैंडबॉक्स से बाहर हैं:

ghc-pkg unregister --force regex-compat-0.95.1

यदि आप एक केबल सैंडबॉक्स के अंदर हैं :

cabal sandbox hc-pkg -- unregister attoparsec --force

पहले --के लिए तर्क विभाजक है hc-pkg। यह ghc-pkgसैंडबॉक्स जागरूक तरीके से चलता है।


20

इसमें कैबल-अनइंस्टॉल पैकेज भी है जो एक cabal-uninstallकमांड प्रदान करता है । यह पैकेज को अनरजिस्ट करता है और फ़ोल्डर को हटा देता है। यह ध्यान देने योग्य है कि यह पास हो जाता --forceहै ghc-pkg unregisterइसलिए यह अन्य पैकेजों को तोड़ सकता है।


1
cabal uninstallपरिणामcabal: unrecognised command: uninstall (try --help)
स्टीवन शॉ

2
@StevenShaw - मेरे द्वारा दिया गया लिंक एक हैकेज पैकेज में जाता है जिसे उपयोग करने के लिए आपको इंस्टॉल करना होगा। मैं डॉन के जवाब की सिफारिश करूंगा, वही मैं उपयोग करता हूं।
दवोरक

@ टोबू द्वारा उपरोक्त टिप्पणी से कैबेल-डिलीट के बारे में क्या ? क्या यह कैबल-अनइंस्टॉल से बेहतर या अधिक शक्तिशाली है?
इम्ज़ - इवान ज़खरीशेव

7

यहां एक शेल स्क्रिप्ट है जिसका उपयोग मैं पैकेज की स्थापना रद्द करने के लिए करता हूं। यह जीएचसी के कई स्थापित संस्करणों का समर्थन करता है और प्रासंगिक फाइलों को भी मिटा देता है (लेकिन वारंटी के बिना प्रदान किया जाता है, यदि आप अपनी स्थापना को पूरा करते हैं तो मुझे दोष न दें!)

#!/bin/bash -eu
# Usage: ./uninstall.sh [--force | --no-unregister] pkgname-version

# if you set VER in the environment to e.g. "-7.0.1" you can use
# the ghc-pkg associated with a different GHC version
: ${VER:=}

if [ "$#" -lt 1 ]
then
        echo "Usage: $0 [--force | --no-unregister] pkgname-version"
        exit 1
fi

if [ "$1" == "--force" ]
then force=--force; shift; # passed to ghc-pkg unregister
else force=
fi

if [ "$1" == "--no-unregister" ]
then shift # skip unregistering and just delete files
else
        if [ "$(ghc-pkg$VER latest $1)" != "$1" ]
        then
                # full version not specified: list options and exit
                ghc-pkg$VER list $1; exit 1
        fi
        ghc-pkg$VER unregister $force $1
fi

# wipe library files
rm -rfv -- ~/.cabal/lib/$1/ghc-$(ghc$VER --numeric-version)/

# if the directory is left empty, i.e. not on any other GHC version
if rmdir -- ~/.cabal/lib/$1 
then rm -rfv -- ~/.cabal/share/{,doc/}$1 # then wipe the shared files as well
fi

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