在 GHC/Haskell 平台安装的任何地方

26
假设我想要完全重新安装 GHC/HP。 我希望(出于迷信和其他原因)删除以前安装的任何东西。 那么我实际上需要删除什么(以及在哪里)?
编辑:我在OSX上,但我更想知道是否可以在所有系统上找到这些信息。
编辑2:到目前为止,我们有:
OSX: /Library/Frameworks/GHC.framework/ ~/.cabal/ /usr/bin/--符号链接
我会根据此处定义的“prefix”添加以下内容:http://www.vex.net/~trebla/haskell/sicp.xhtml#storage: prefix/lib/ prefix/share/ prefix/bin/ prefix/share/doc/ /usr(/local)/lib/[ghc-version] /usr(/local)/share/doc/ghc/html/libraries/ -- documentation /usr(/local)/share/doc/ghc/ /usr(/local)/bin /var/lib/[ghc-version] /etc/[ghc-version] ~/.ghc/
编辑3: OS X: 〜/Library/Haskell
Linux: ??
Windows: ??

2
你正在使用哪个操作系统? - Ken Wayne VanderLinde
我对OSX一无所知,但这将高度依赖于平台和安装方式。例如,如果我通过Ubuntu的软件包管理器安装HP,我可以使用软件包管理器再次删除它。在像我目前运行的手动安装中,我将所有内容放在自己的目录中,并且必须删除该目录才能将其删除。 - hammar
我更感兴趣的是“外部边界”:那么,一个人必须查看哪些目录才能确保卸载HP和“cabal install”的任何直接结果,例如删除。 - amindfv
4个回答

23

最近在Mac OS X上不得不移除Haskell平台。大部分通过卸载程序进行清理:

sudo /Library/Frameworks/GHC.framework/Versions/Current/Tools/Uninstaller

这些必须手动清理:

rm -r ~/.cabal
rm -r ~/.ghc
rm -r ~/Library/Haskell

或者,正如文档中所记录的那样

/Library/Haskell/doc/start.html

现在有一个带选项的自定义卸载命令,

/Library/Haskell/bin/uninstall-hs

通常情况下,可以通过在工作目录中使用括号对活动(安装程序等)进行标记来记录任何活动创建的文件。

echo >timestamp
[activity]
sudo find -x / -newer timestamp -print >snapshot.txt

2
第二个选项 uninstall-hs 现在似乎是最好的答案。 - PLL

14
如果您在OS X上安装了自2012年以来的Haskell平台,只需运行以下命令:
uninstall-hs

仔细阅读它的输出内容。你需要按照它提供的选项再次运行它。运行:

uninstall-hs --help

更多选项请参考。


以下是我的原始回答,仍然有效,但提供的选项较少,有些"生硬":

警告: 这个脚本非常强大。它将删除您的 GHC 和 Cabal 的自定义配置文件,以及您在 ~/Library/Haskell~/.cabal 中构建的可执行文件。请谨慎使用;审查它即将要做的事情;备份好数据;脚本使用需谨慎!

#!/bin/bash
set -x

sudo rm -rf /Library/Frameworks/GHC.framework
sudo rm -rf /Library/Frameworks/HaskellPlatform.framework
sudo rm -rf /Library/Haskell
rm -rf ~/.cabal
rm -rf ~/.ghc
rm -rf ~/Library/Haskell
find /usr/bin /usr/local/bin -type l | \
  xargs -If sh -c '/bin/echo -n f /; readlink f' | \
  egrep '//Library/(Haskell|Frameworks/(GHC|HaskellPlatform).framework)' | \
  cut -f 1 -d ' ' > /tmp/hs-bin-links
sudo rm -f `cat /tmp/hs-bin-links`

您可能需要添加代码来保存和恢复您的配置文件:

mv ~/.cabal/config /tmp/cabal-config 2>/dev/null || true
mv ~/.ghc/gchi.conf /tmp/ghci-config 2>/dev/null || true

并且

mkdir ~/.cabal
mkdir ~/.ghc
cp /tmp/cabal-config ~/.cabal/config 2>/dev/null || true
cp /tmp/ghci-config ~/.ghc/gchi.conf 2>/dev/null || true

使用以下方法括起来rm行。如果您正在升级到新版本,则可能需要旧的~/.cabal/config文件,也可能不需要。

请注意,这仅处理当前用户的主目录。如果您有多个用户帐户都在使用Haskell,则其他帐户也需要清理(重复涉及~的行)。


2

uninstall-hs可以帮你完成一些工作,但我不确定具体能做多少。


2
我在开发了上述脚本后编写了uninstall-hs!它同样彻底,但更加灵活,并且具有许多选项。 - MtnViewMark

2

我使用的是OSX系统(现在是Lion版本)。我已经安装了GHC,路径为/Library/Frameworks/GHC.framework/(包括当前和之前的版本)。在/usr/bin目录下也有一些符号链接,但这些将被新安装替换。

如果您使用cabal(本地)安装软件包,您可能还想清除~/.cabal目录。如果您有最新的cabal,您可以使用cabal install world重新安装所有“新”GHC版本的软件包,然后查找与您之前安装的GHC版本匹配的目录,方法如下:

for package in `ls ~/.cabal/lib/`; do 
   if [ ! -d ~/.cabal/lib/${package}/ghc-7.0.3 ]; then 
       echo $package; 
   else 
       echo "OK for $package"; 
   fi;
done 

这些内容可以安全删除。

希望这能对您有所帮助。


此信息现在在上面的“Edit2”中。谢谢。 - amindfv
我完全忘记了 ~/.ghc :-/ 那里有一个每个版本的目录,你可能也想看看。 - Itkovian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接