当我有沙盒时,似乎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
,但我的问题是指已安装的软件包。
答案 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
文件的问题。以下程序似乎是一种安全的方法:
cabal install --only-dependencies
我不知道是否需要package.cache文件,或者是否有重建方法。
一个缺点是cabal install --only-deps
似乎在沙盒中重新安装损坏的包,即使您的应用程序不需要它们。也许有解决办法。