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-html
时,ghc-pkg
表示我的命令已被忽略。
我该怎么办?
更新:不要相信。虽然ghc-pkg
声称忽略该命令,但命令不会被忽略。在Don Stewart接受的答案中,您可以删除您想要删除的版本。
答案 0 :(得分:92)
您可以ghc-pkg unregister
特定版本,例如:
$ ghc-pkg unregister --force regex-compat-0.95.1
这应该足够了。
答案 1 :(得分:23)
如果您在沙箱外面:
ghc-pkg unregister --force regex-compat-0.95.1
如果你在cabal sandbox内:
cabal sandbox hc-pkg -- unregister attoparsec --force
第一个--
是hc-pkg
的参数分隔符。这会以沙箱感知的方式运行ghc-pkg
。
答案 2 :(得分:20)
还有cabal-uninstall包提供cabal-uninstall
命令。它取消注册包并删除该文件夹。值得一提的是,它将--force
传递给ghc-pkg unregister
,因此它可以破坏其他包。
答案 3 :(得分:6)
这是我用来卸载软件包的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