85

Happstack Lite 打破了我,因为它正在获取 blaze-html 版本 0.5 并且它想要版本 0.4。Cabal 说安装了 0.4.3.4 和 0.5.0.0两个版本。我想删除 0.5.0.0 并只使用旧版本。但是 cabal 没有“卸载”命令,当我尝试时ghc-pkg unregister --force blaze-htmlghc-pkg说我的命令已被忽略。

我该怎么办?

更新不要相信。尽管ghc-pkg声称忽略该命令,但该命令并未被忽略。并且使用唐斯图尔特接受的答案,您可以准确删除您希望消除的版本。

4

4 回答 4

96

您可以ghc-pkg unregister使用特定版本,如下所示:

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

这应该足够了。

于 2012-05-14T17:06:49.987 回答
23

如果您在沙盒之外:

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

如果您在cabal 沙箱中:

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

第一个--是 的参数分隔符hc-pkg。这ghc-pkg以沙盒感知方式运行。

于 2014-06-18T12:22:04.080 回答
20

还有提供命令的cabal-uninstall软件包。cabal-uninstall它取消注册包并删除文件夹。值得一提的是,它传递--forceghc-pkg unregister它可以破坏其他包。

于 2013-01-10T00:02:40.940 回答
7

这是我用来卸载软件包的 shell 脚本。它支持多个已安装的 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
于 2012-09-05T20:34:02.340 回答