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


82

Happstack Liteは、blaze-htmlバージョン0.5を取得していて、バージョン0.4が必要なため、問題が発生しています。Cabalによるとバージョン0.4.3.4と0.5.0.0の両方がインストールされています。0.5.0.0を削除して、古いバージョンだけを使用したいと思います。しかし、秘密結社は、「アンインストール」コマンドを持っていない、と私はしようとするとghc-pkg unregister --force blaze-htmlghc-pkg私のコマンドが無視されてきたと言います。

私は何をしますか?

更新信じないでくださいghc-pkgコマンドを無視すると主張していますが、コマンド無視されません。そして、ドン・スチュワートの受け入れられた答えで、あなたはあなたが排除したいバージョンを正確に削除することができます。


2
ghc-pkg list blaze-html?適切なユーザーとして実行していますか?たぶん、登録解除するバージョンを明示的に述べていますか?
ivanm 2012年

1
@ivanm質問してくれてありがとう。私にghc-pkg ついたことが判明!
ノーマンラムゼー2012年

stackoverflow.com/questions/7252193/…の複製のようなものですが、これが優れているため、フラグを立てるのは気が進まない:)
Ben Millwood 2012

1
cabal-deleteは、孤立したパッケージを見つけて削除するのに非常に便利です。
東武

@Tobucabal-uninstall 以下の回答で言及されいるのはどうですか?cabal-deleteはより強力ですか?それは陰謀団のサンドボックスで動作しますか(cabal exec -- cabal-delete正しく動作し、サンドボックスからパッケージを削除します)?これも答えてみませんか?それは素晴らしいツールのように見えます。
imz --Ivan Zakharyaschev 2015年

回答:


95

次のghc-pkg unregisterように、特定のバージョンを作成できます。

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

それで十分なはずです。


17
登録を解除すると、プルーニングする必要のあるファイルがどこかにありますか?
Erik Kaplun 2015

他の場所へのコメントは、ghc-pkgがフォルダを残していると述べていますか?
CMCDragonkai 2015

~/.cabal/
pkgs

23

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

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

あなたが陰謀団のサンドボックスの中にいる場合:

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

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


20

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


1
cabal uninstall結果cabal: unrecognised command: uninstall (try --help)
Steven Shaw

2
@ StevenShaw-私が提供したリンクは、使用するためにインストールする必要のあるハッキングパッケージに移動します。私はドンの答えをお勧めします、それは私が使用するものです。
davorak 2014

どのような秘密結社・削除@Tobuことによって、上記のコメントから?それはcabal-uninstallよりも優れていますか、それとも強力ですか?
imz --Ivan Zakharyaschev 2015年

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で試したところ、うまくいかないようです。
ピュロスの勝利2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.