【问题标题】:Can cabal not un-install packages?cabal 不能卸载软件包吗?
【发布时间】:2011-08-31 03:15:59
【问题描述】:

cabal help 表示没有“卸载”选项。

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

% cabal update
% cabal install mighttpd2

mighttpd2 安装成功。但是 ghc-pkg 无法找到并注销它:

% ghc-pkg list | grep -i might
% ghc-pkg unregister mighttpd2
ghc-pkg: cannot find package mighttpd2 

真诚的!

>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:

所以 ghc-pkg 看不到“.cabal/packages/hackage.haskell.org”。

【问题讨论】:

  • 不能“卸载”,只能注销:haskell.org/haskellwiki/…
  • 我的猜测是用户不匹配; cabal list mightppd2 说它已经安装了吗?您确定您使用与执行 ghc-pkg 相关的相同用户(即 sw2wolf)来安装软件包吗?
  • 我确定是同一个用户。 1cabal list mightppd2 报告“未找到匹配项。”

标签: haskell


【解决方案1】:

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

步骤 1

首先,试着找出你的 GHC 包路径是什么,

ghc-pkg list
    # displays stuff like "/home/username/.../package.conf.d"

然后,确保 Cabal 正在写入的那个是活跃的。对我来说,Cabal 将包添加到

/home/username/.ghc/x86_64-linux-7.0.4/package.conf.d

第二步

如果你的系统上没有这样的目录,看看 Cabal 写的是什么。

strace -f -o trace.txt cabal install mighttpd2
grep "package\.cache" trace.txt

然后将包路径添加到这个系统环境变量中

export GHC_PACKAGE_PATH=NEWPATH:/usr/local/lib/ghc-7.0.3/package.conf.d

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

第三步

查看那个目录,看看是否有类似的文件

mighthttpd2-version-LONGHASHCODE.conf

如果它在那里,那么你可能需要重新缓存

ghc-pkg recache --user

【讨论】:

  • ghc-pkg 列表 | grep -i package /usr/local/lib/ghc-7.0.3/package.conf.d: /home/sw2wolf/.ghc/i386-freebsd-7.0.3/package.conf.d:
【解决方案2】:

GHC 包系统不用于可执行文件,mighttpd2 包只构建可执行文件。要卸载它,只需删除包的 cabal 文件中列出的两个可执行文件(mightymkindex)和两个数据文件(sample.confsample.route)。您可以通过仔细阅读 ~/.cabal/config 中 cabal 的配置文件来找到这些文件安装到哪些目录。

【讨论】:

  • 好的,但是mighty依赖的包很难删除。由于cabal install might* 安装了许多我以前不需要的软件包。
  • 确实如此。目前没有工具支持跟踪为什么安装包(因此没有工具支持突出显示不再有安装理由的包)。对此感到抱歉。
猜你喜欢
  • 2012-05-21
  • 2010-11-19
  • 2018-11-08
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
相关资源
最近更新 更多