【问题标题】:Cabal-installed Modules won't importCabal 安装的模块不会导入
【发布时间】:2015-07-21 00:33:25
【问题描述】:

这里有几件事让我感到困惑,所以我会尽可能清楚地解释它们。

我一直在尝试使用 cabal 为 haskell 安装 diagrams 软件包。 I've seen it suggested 使用沙箱安装软件包,这就是我所做的。我不清楚沙箱到底是什么——我知道我可以使用cabal sandbox init 初始化一个沙箱,并使用cabal install 在其中安装包,但我不知道一旦它们是如何使用这些包安装。

然后我尝试使用 ghc 编译一个测试脚本,结果出现以下错误:

diagramstutorial.lhs:3:10:
    Could not find module 'Diagrams.Prelude'
    Use -v to see a list of the files searched for.

脚本应该加载的另一个模块出现类似错误。这些模块肯定都包含在图表包中,并且 cabal 似乎很高兴该包安装正确。我希望有一些简单的东西我只是不明白,但我不知道它是什么。

【问题讨论】:

标签: haskell ghc cabal


【解决方案1】:

我输入了ghc --make diagramstutorial.lhs 来编译它

这将使 GHC 使用常规用户包数据库(即,不是沙盒数据库)。请改用cabal exec -- ghc --make diagramstutorial.lhs,以便 GHC 在您的沙箱上下文中运行。

您还可以通过cabal repl 在沙盒中使用 GHCi。当然,如果/当您开始准备一个 cabal 包时,如果您在其目录中,所有 cabal 命令(cabal build 等)都将使用沙箱。

我不清楚沙盒到底是什么

一组包,附带目录本地的数据库。除了cabal.sandbox.config 配置文件之外,还有一个隐藏目录.cabal-sandbox,其中diagrams 和您安装的其他软件包都在其中。

【讨论】:

  • 这仅适用于 Cabal 1.20 及更高版本。对于旧版本,请参阅下面的我的回复,这是一个全局解决方案,应该是首选。
  • 发生了一些令人困惑的事情......这个建议昨天运行良好,但现在我收到错误 cabal.exe: unrecognised command: exec (try --help)。你知道可能发生了什么吗?
  • @DanielLittlewood cabal --version 告诉你什么?正如 Arnon 指出的,cabal exec 是在 1.20 版本中添加的。您今天是否有可能使用旧版本的 cabal? (这并不像听起来那么难以置信,因为cabal install cabal-install 将执行本地而非系统范围的 cabal 程序安装。)
  • 啊哈,我明白了!是的,这就是问题所在,我不知道 cabal 也会在本地安装自己。谢谢!
【解决方案2】:
  1. 找到沙盒目录,找到packages.conf.d文件。 例如,/home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d

  2. 使用package-db 标志重新运行您的 GHC 命令:

    ghci -package-db /home/user/.cabal-sandbox/x86_64-linux-ghc-7.8.4-packages.conf.d --make diagramstutorial.lhs

现在应该一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2016-05-12
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多