Cabal 패키지 버전을 제거하려면 어떻게해야합니까?


82

Happstack Lite는 blaze-html 버전 0.5를 얻고 버전 0.4를 원하기 때문에 저를 깨고 있습니다. Cabal은 0.4.3.4 및 0.5.0.0 버전 이 모두 설치되어 있다고 말합니다 . 0.5.0.0을 제거하고 이전 버전 만 사용하고 싶습니다. 그러나 cabal에는 "uninstall"명령이 없으며를 시도 ghc-pkg unregister --force blaze-html하면 ghc-pkg명령이 무시되었다고합니다.

어떡하죠?

업데이트 : 그것을 믿지 마십시오 . ghc-pkg명령을 무시한다고 주장 하지만 명령 무시 되지 않습니다 . 그리고 Don Stewart의 대답으로 제거하려는 버전을 정확히 제거 할 수 있습니다.


2
ghc-pkg list blaze-html? 올바른 사용자로 실행하고 있습니까? 등록 취소 할 버전을 명시 적으로 명시 할 수 있습니까?
ivanm

1
@ivanm 물어봐 주셔서 감사합니다. 턴 아웃 ghc-pkg 거짓말을 나에게!
Norman Ramsey

정렬의 중복의 stackoverflow.com/questions/7252193/... ,을하지만 플래그를 꺼려 해요 그것이 하나의 더 나은 :) 때문에
벤 밀우드

1
cabal-delete 는 고아 패키지를 찾고 제거하는 데 매우 유용 합니다.
Tobu

@Tobu cabal-uninstall 아래 답변에서 언급 한 것은 어떻습니까? cabal-delete가 더 강력합니까? cabal 샌드 박스와 함께 작동 할 수 있습니까 ( cabal exec -- cabal-delete올바르게 작동하고 샌드 박스에서 패키지를 삭제함)? 이것도 대답하지 않겠습니까? 멋진 도구처럼 보입니다.
imz-Ivan Zakharyaschev

답변:


95

다음 ghc-pkg unregister과 같이 특정 버전을 지정할 수 있습니다 .

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

충분합니다.


18
등록이 취소되면 정리해야 할 파일이 어디에 있습니까?
Erik Kaplun 2015

다른 장소에 대한 의견은 ghc-pkg가 주변에 폴더를 남긴다고 언급합니까?
CMCDragonkai

당신의 모습이 ~/.cabal/PKGS와 바이너리가에 대한 자세한 내용은 폴더
Leahcim

23

샌드 박스 외부에있는 경우 :

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

cabal 샌드 박스 안에있는 경우 :

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

첫 번째 --는에 대한 인수 구분 기호입니다 hc-pkg. 이것은 ghc-pkg샌드 박스 인식 방식으로 실행됩니다 .


20

명령 을 제공하는 cabal-uninstall 패키지 도 있습니다 cabal-uninstall. 패키지 등록을 취소하고 폴더를 삭제합니다. 그것이 통과가 있지만 그것은 언급 할 가치가있다 --force으로 ghc-pkg unregister는 다른 패키지를 중단 할 수 있습니다.


1
cabal uninstall결과cabal: unrecognised command: uninstall (try --help)
스티븐 쇼

2
@StevenShaw-내가 제공 한 링크는 사용하기 위해 설치해야하는 해킹 패키지로 연결됩니다. 나는 Don의 대답을 추천하고 싶습니다.
Davorak 2014

무엇에 대한 음모 - 삭제 위의 댓글에서 @Tobu로? cabal-uninstall보다 더 낫거나 더 강력합니까?
imz-Ivan Zakharyaschev

7

다음은 패키지를 제거하는 데 사용하는 셸 스크립트입니다. 설치된 여러 버전의 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.