haskell - 我如何卸载一个Cabal软件包的版本?

  显示原文与译文双语对照的内容

Happstack Lite正在破坏我,因为它正在获取blaze-html版本 0.5并且需要 0.4版本。 阴谋集团说, 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

这应该足够了。

原作者:

还有 cabal-uninstall 软件包提供 cabal-uninstall 命令。 它注销软件包并删除文件夹。 值得提到的是,它将 --force 传递给 ghc-pkg unregister,这样它就可以破坏其它软件包。

原作者:

如果你在沙箱外:


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

如果你在阴谋沙盒沙箱中:


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

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

原作者:

下面是我用来卸载软件包的外壳脚本。 它支持多个安装版本的and,也会删除相关的文件( 但没有担保,不损害我如果你的安装) 。


#!/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

原作者:
...