如何卸载Cabal软件包的版本?


82

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声称忽略了该命令,但并未忽略该命令。使用Don Stewart接受的答案,您可以删除希望删除的版本。


2
ghc-pkg list blaze-html?您确定以正确的用户身份运行它吗?也许明确指出要注销的版本?
ivanm

1
@ivanm感谢您的询问。原来对我ghc-pkg 撒谎
诺曼·拉姆齐

有点像stackoverflow.com/questions/7252193/…的副本,但是我不愿意标记它,因为这样更好:)
Ben Millwood 2012年

1
cabal-delete非常适合查找和删除孤立的软件包。
东武2015年

@Tobucabal-uninstall 下面的答案中提到了什么?Cabal-delete更强大吗?它可以与Cabal沙箱一起使用cabal exec -- cabal-delete吗(可以正常工作并从沙箱中删除软件包)?为什么也不要将其作为答案?它看起来像一个不错的工具。
imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)

Answers:


95

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

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

这样就足够了。


17
一旦注销,是否有文件应修剪?
埃里克·卡普伦

在其他地方的评论提到ghc-pkg将文件夹留在附近?
CMCDragonkai,2015年

在您的~/.cabal/文件夹中查看有关
pkg

23

如果您不在沙盒中:

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

如果您在阴谋集团沙箱内:

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

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


20

也有cabal-uninstall软件包提供cabal-uninstall命令。它将取消注册软件包并删除文件夹。值得一提的是,它传递--force给了它,ghc-pkg unregister因此可以破坏其他软件包。


1
cabal uninstall结果cabal: unrecognised command: uninstall (try --help)
Steven Shaw 2014年

2
@StevenShaw-我提供的链接转到您需要安装才能使用的黑客程序包。我会推荐唐的答案,那就是我用的。
Davorak

什么阴谋,删除从上面的评论通过@Tobu?它比cabal-uninstall更好或更强大吗?
imz-伊万·扎哈拉里舍夫(Ivan Zakharyaschev)

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

1
我只是在Mac上尝试过,似乎没有用。
pyrrhic's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.