cabal不能卸载包吗?

z_a*_*xis 4 haskell

cabal help 显示thers不是"卸载"选项.

那么卸载cabal安装的软件包的最佳方法是什么?

% cabal update
% cabal install mighttpd2
Run Code Online (Sandbox Code Playgroud)

mighttpd2已成功安装.但是ghc-pkg无法找到并取消注册:

% ghc-pkg list | grep -i might
% ghc-pkg unregister mighttpd2
ghc-pkg: cannot find package mighttpd2 
Run Code Online (Sandbox Code Playgroud)

祝商祺!

>find .cabal | grep -i mighttp
.cabal/share/doc/mighttpd2-2.3.3
.cabal/share/doc/mighttpd2-2.3.3/LICENSE
.cabal/share/mighttpd2-2.3.3
.cabal/share/mighttpd2-2.3.3/sample.conf
.cabal/share/mighttpd2-2.3.3/sample.route
.cabal/packages/hackage.haskell.org/mighttpd2
.cabal/packages/hackage.haskell.org/mighttpd2/2.3.3
.cabal/packages/hackage.haskell.org/mighttpd2/2.3.3/mighttpd2-2.3.3.tar.gz

>ghc-pkg list | grep -i package\.conf
 /usr/local/lib/ghc-7.0.3/package.conf.d:
 /home/sw2wolf/.ghc/i386-freebsd-7.0.3/package.conf.d:
Run Code Online (Sandbox Code Playgroud)

所以ghc-pkg无法看到".cabal/packages/hackage.haskell.org".

gat*_*ado 5

您可能没有将Cabal路径作为GHC路径的一部分.

步骤1

首先,尝试找出GHC包路径是什么,

ghc-pkg list
    # displays stuff like "/home/username/.../package.conf.d"
Run Code Online (Sandbox Code Playgroud)

然后,确保Cabal正在写入的一个是活动的.对我来说,Cabal增加了包裹

/home/username/.ghc/x86_64-linux-7.0.4/package.conf.d
Run Code Online (Sandbox Code Playgroud)

第2步

如果您的系统上没有这样的目录,请参阅Cabal写的内容.

strace -f -o trace.txt cabal install mighttpd2
grep "package\.cache" trace.txt
Run Code Online (Sandbox Code Playgroud)

然后将包路径添加到此系统环境变量

export GHC_PACKAGE_PATH=NEWPATH:/usr/local/lib/ghc-7.0.3/package.conf.d
Run Code Online (Sandbox Code Playgroud)

再试一次,如果不起作用,请继续执行第3步

第3步

查看该目录,看看是否有像这样的文件

mighthttpd2-version-LONGHASHCODE.conf
Run Code Online (Sandbox Code Playgroud)

如果它在那里,那么你可能需要重新安排

ghc-pkg recache --user
Run Code Online (Sandbox Code Playgroud)