繁体   English   中英

使用ghc-pkg列表和cabal列表-已安装给出不同的列表

[英]Using ghc-pkg list and cabal list --installed give different lists

我正在尝试加载.hs文件,但是当我import Data.Numbers.CReal ,它给了我错误: Failed to load interface for 'Data.Numbers.CReal' 我已经运行了cabal install numbers ,如果我cabal list --installedcabal list --installed ,则会显示pkg,但是如果我ghc-pkg list不会显示(同样,如果我ghc-pkg check它会给出很多黑线警告的信息)。 它与我的非加载文件有关吗? 我该如何解决?

PS。 我知道如何导入软件包,但是我不确定是否正确导入了这个软件包。

感谢和抱歉,如果我没有正确解释自己。

我想到两个假设:

  1. cabal选择的是ghc及其参与工具ghc版本与您的shell不同。 您可以通过运行以下两个命令来检查这种差异:

     cabal exec -- ghc --version ghc --version 

    他们说同样的话吗? 如果是这样,请拒绝该假设。 否则,您应该决定是更喜欢外壳的选择还是阴谋集团的选择(我建议您更喜欢外壳的选择)。

    如果您更喜欢cabal的选择,可以通过在命令后附加-<version>来使用特定版本的GHC(和其他GHC工具)。 例如,尝试ghc-pkg-7.10.3 list以查看7.10.3版的软件包数据库中的内容,或者尝试ghci-7.10.3来运行特定版本的REPL。 您可以通过添加符号链接或类似于PATH方式使这些更改永久生效。

    如果您更喜欢shell的选择,则可以要求cabalcabal configure -w ghc一起使用该版本; 或者,如果您担心cabal和您的shell将以不同的方式解析ghc ,则可以要求使用cabal configure -w ghc-7.10.3或类似的特定版本。

  2. 您的外壳与cabal同意使用哪种版本的GHC,但是您位于cabal沙箱中。 cabal list --installed告诉您沙箱中已经安装了什么,但是ghc-pkg list告诉您用户包数据库中已经安装了什么。 您可以检查以下两个命令之间的差异:

     cabal exec -- ghc-pkg list numbers ghc-pkg list numbers 

    (如果您使用的是新的cabal-不知道它出现在哪个版本中,还可以尝试使用cabal hc-pkg list而不是cabal exec -- ghc-pkg list 。这可能是更向前兼容的方式,因此养成良好的习惯。)

    如果这些打印出相同的内容,请拒绝该假设。 否则,您应该决定是否要继续使用沙箱(我建议继续使用沙箱)。

    如果要停止使用沙箱,可以将--ignore-sandbox传递给cabal 要使其永久存在,请查看cabal.sandbox.config文件,该文件将包含指向实际沙箱的指针(通常是.cabal.sandbox )。 删除配置和沙箱。 您还可以通过添加ignore-sandbox: True来全局地忽略沙ignore-sandbox: True ~/.cabal/config ,但是我强烈建议您这样做。

    如果要保留沙箱,则需要对所有GHC工具使用cabal exec ,以确保选择了正确的软件包数据库。 例如,尝试使用cabal exec ghci运行具有访问沙箱包数据库权限的REPL。

这些假设并非相互排斥: 两者都可能发生。 在那种情况下,我强烈建议选择最终解决方案(“对所有GHC toolsuite执行都使用cabal exec ”),因为它可以透明地处理这两个问题:标准的GHC toolsuite命令将被重写为引用显式版本的命令(例如, cabal exec ghc将实际执行ghc-7.10.3 ),然后将环境设置为指向正确的软件包数据库。

答案

您可以通过运行以下两个命令来检查这种差异:

cabal exec-ghc --version ghc --version

他们说同样的话吗?

是的。 我不记得第二种选择,但是我已经设法自己解决了。 我专门做的是:

  1. 运行命令“ rm -rf .cabal”(不带逗号)删除cabal配置。
  2. 运行“ rm -rf .cabal-sandbox”
  3. 运行“ rm -rf .ghc”
  4. cabal新建cabal(不确定是否有帮助)
  5. 在管理员模式(sudo)中,我编辑了cabal配置文件,并将“忽略沙箱”更改为True-> 将来会给我带来麻烦吗? 我应该把它改回false吗? 请回答
  6. 必须删除引起麻烦的cabal.sandbox.config
  7. cabal install cabal-install
  8. 阴谋集团更新

现在,ghc-pkg list命令和cabal list --installed显示了我已安装的软件包,它们可以正常工作。

PS。 我提供了该过程的详细信息,以防将来有人需要。 仍然不确定是什么导致cabal和ghc没有显示相同的pkg。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM