2012-05-14 3 views
77

Happstack Lite는 불타고있는 html 버전 0.5와 버전 0.4를 원하기 때문에 저를 속이고 있습니다. Cabal은 버전 0.4.3.4 및 0.5.0.0이 모두 설치되어 있다고 말합니다. 0.5.0.0을 제거하고 이전 버전 만 사용하고 싶습니다. 하지만 cabal에는 "제거"명령이 없으며 ghc-pkg unregister --force blaze-html을 시도하면 ghc-pkg에 내 명령이 무시되었다고 표시됩니다.Cabal 패키지 버전을 제거하려면 어떻게해야합니까?

어떻게해야합니까?

업데이트 : 믿을 수 없다.. ghc-pkg이 명령을 무시한다고 주장하더라도 명령은 무시됩니다 (). 그리고 돈 스튜어트 (Don Stewart)의 대답으로 당신이 제거하고 싶은 버전을 정확히 제거 할 수 있습니다. 그래서 같은

+2

'ghc-pkg list blaze-html'? 올바른 사용자로 실행하고 있습니까? 등록되지 않은 버전을 명시 적으로 명시 하시겠습니까? – ivanm

+1

@ivanm 질문 해 주셔서 감사합니다. 'ghc-pkg' * 거짓말 *이 나에게 나타납니다! –

+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와 바이너리가 어디 있는지에 대한 정보를 가지고있다. – 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

나는 Mac에서 이것을 시도했지만 제대로 작동하지 않는다. – pyrrhic

20

cabal-uninstall 명령을 제공하는 cabal-uninstall 패키지도 있습니다. 패키지의 등록을 취소하고 폴더를 삭제합니다. 비록 다른 패키지를 깨뜨릴 수 있으므로 --forceghc-pkg unregister으로 전달한다고 언급 할 가치가 있습니다.

+1

'cabal uninstall' 결과는'cabal : unrecognized command : uninstall (try --help)'이됩니다. –

+2

@StevenShaw - 제가 제공 한 링크는 사용하기 위해 설치해야하는 hackage 패키지로갑니다.돈의 대답을 권하고 싶습니다. 그것은 제가 사용하는 것입니다. – Davorak

+0

@Tobu의 위 코멘트에서 [cabal-delete] (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을 샌드 박스 인식 방식으로 실행합니다.

관련 문제