2012-05-14 9 views
77

हैप्स्टैक लाइट मुझ पर टूट रहा है क्योंकि यह धुंध-एचटीएमएल संस्करण 0.5 हो रहा है और यह संस्करण 0.4 चाहता है। Cabal का कहना है कि दोनों संस्करण 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' * lied * को बाहर कर देता है! –

+0

http://stackoverflow.com/questions/7252193/can-cabal-not-un-install-packages का डुप्लिकेट सॉर्ट करें, लेकिन मैं इसे ध्वजांकित करने में अनिच्छुक हूं क्योंकि यह बेहतर है :) –

उत्तर

89

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

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

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

+17

एक बार अनियंत्रित, क्या वहां कहीं भी झूठ बोलने वाली कोई भी फाइलें छीननी चाहिए? –

+0

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

+0

आपके '~/.cabal /' फ़ोल्डर में एक तस्वीर है जहां pkgs और binaries – Leahcim

6

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

#!/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

हैं, मैंने अभी मैक पर यह कोशिश की है और यह काम नहीं कर रहा है। – pyrrhic

20

वहाँ भी है cabal-uninstall पैकेज है जो एक cabal-uninstall आदेश प्रदान करता है। यह पैकेज को अनियंत्रित करता है और फ़ोल्डर को हटा देता है। यह उल्लेखनीय है कि यह --force से ghc-pkg unregister तक गुजरता है, इसलिए यह अन्य पैकेज तोड़ सकता है।

+1

'कैबल अनइंस्टॉल' परिणाम 'कैबल में: अपरिचित कमांड: अनइंस्टॉल करें (try --help)' –

+2

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

+0

@ टोबू द्वारा उपरोक्त टिप्पणी से [कैबल-डिलीट] (https://github.com/iquiw/cabal-delete) के बारे में क्या? क्या यह कैबल-अनइंस्टॉल करने से बेहतर या अधिक शक्तिशाली है? –

23

अगर आप एकसैंडबॉक्स बाहर हैं, तो:

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

आप एक cabal sandbox अंदर कर रहे हैं:

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

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

संबंधित मुद्दे

 संबंधित मुद्दे