如何使cabal沙箱了解(已安装)其他位置的包?

时间:2015-02-19 14:50:06

标签: haskell cabal

当我有沙盒时,似乎cabal install会忽略$HOME/.ghc/x86_64-linux-7.8.4/package.conf.d中的包。

如何配置沙箱以使这些包可见? 我在https://www.haskell.org/cabal/users-guide/installing-packages.html#sandboxes-advanced-usage中看到对--package-db=db的模糊引用 但我既不明白也不知何时使用它。 (使用sandbox init?configure?install?none似乎工作 - none也没有给出任何错误消息。)

我知道add-source,但我的问题是指已安装的软件包。

2 个答案:

答案 0 :(得分:1)

沙箱的重点是忽略了本地包数据库。

如果要跨多个沙箱共享安装,可以安装到全局数据库;但是你应该非常小心,因为修复破坏包裹的不良之处要困难得多。将它保存到您期望在许多项目中广泛共享的真正核心软件包 - 不仅仅是您现在为工作强调的六个项目。

或者,您可以在许多包的构建之间共享一个沙箱;只需将CABAL_SANDBOX_CONFIG变量设置为指向相应cabal.sandbox.config文件的绝对路径即可。这样更安全,更灵活,因为您可以选择共享已安装软件包的广泛程度(在不良情况下,只需将沙箱核对并重新开始)。

答案 1 :(得分:1)

您可以尝试以下操作 - 将文件从〜/ .ghc / {arch-os-ghc-version} /package.conf.d复制(或符号链接)到沙箱的{arch-os-ghc-version} -packages.conf.d目录。

有一个关于package.cache文件的问题。以下程序似乎是一种安全的方法:

  1. 从空沙箱开始
  2. 将package.conf.d文件从〜/ .ghc复制到沙箱(包括package.cache)
  3. 通过cabal install --only-dependencies
  4. 将包添加到沙箱中

    我不知道是否需要package.cache文件,或者是否有重建方法。

    一个缺点是cabal install --only-deps似乎在沙盒中重新安装损坏的包,即使您的应用程序不需要它们。也许有解决办法。