我怎样才能卸载一个Cabal软件包的版本?

Happstack Lite打破了我,因为它得到了火焰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声称忽略命令,但命令不会被忽略。 随着唐·斯图尔特的接受答案,你可以删除你想要消除的版本。

你可以ghc-pkg unregister一个特定的版本,如下所示:

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

这应该是足够的。

如果您在沙箱外面:

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

如果你在一个cabal沙箱内:

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

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

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

这里有一个我用来卸载软件包的shell脚本。 它支持GHC的多个安装版本,并擦除相关的文件(但没有提供保修,不要责怪我,如果你软pipe安装!)

 #!/bin/bash -eu # Usage: ./uninstall.sh [--force | --no-unregister] pkgname-version # if you set VER in the environment to eg "-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, ie 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