web-dev-qa-db-ja.com

Cabalパッケージのバージョンをアンインストールするにはどうすればよいですか?

Happstack Liteは、blaze-htmlバージョン0.5を取得しており、バージョン0.4を必要としているため、私を壊しています。 Cabalによれば、bothバージョン0.4.3.4および0.5.0.0がインストールされています。 0.5.0.0を削除して、古いバージョンのみを使用したいと思います。しかし、cabalには「アンインストール」コマンドがなく、ghc-pkg unregister --force blaze-htmlghc-pkgは、私のコマンドが無視されたと言います。

私は何をしますか?

[〜#〜] update [〜#〜]信じられないghc-pkgはコマンドを無視すると主張し、コマンドは無視されません。また、Don Stewartの受け入れられた回答を使用すると、排除したいバージョンを正確に削除できます。

82
Norman Ramsey

あなたはできる ghc-pkg unregister次のような特定のバージョン:

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

それで十分です。

95
Don Stewart

サンドボックスの外にいる場合:

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

cabal sandbox 内にいる場合:

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

最初の--は、hc-pkgの引数区切り文字です。これは、ghc-pkgをサンドボックス対応の方法で実行します。

23
musically_ut

cabal-uninstallコマンドを提供する cabal-uninstall パッケージもあります。パッケージの登録を解除し、フォルダーを削除します。ただし、--forceghc-pkg unregisterに渡して、他のパッケージを壊す可能性があることに言及する価値があります。

20
Davorak

パッケージをアンインストールするために使用するシェルスクリプトを次に示します。 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
6
Ben Millwood