我正在为我正在做的一个项目尝试cabal-dev;这个项目是一个库,cabal-dev在构建沙箱版本方面做得很好--但是我的部分工作流程有问题……
我有一个脚本,scratch.hs,它(在cabal-dev之前)我会加载到ghci中去尝试一些东西。当然,scratch.hs的内容随着时间的推移而变化,这取决于我正在处理的特性。scratch.hs不是库代码库的一部分,它只是我在工作时的个人刮擦空间。
现在,为了获得加载沙箱的ghci会话,我只需使用cabal-dev ghci,然后将scratch.hs加载到其中。问题是,这(从设计上来说是合理的)排除了我的用户包数据库,因此如果scratch.hs从不在我库的build-depends中的包中引用模块(这不是不合理的--毕竟它不是库的一部分),那么这些包是不可见的,因此我得到了一个错误,例如:
scripts/scratch.hs:8:8:
Could not find module `Data.Aeson.Generic':
It is a member of the hidden package `aeson-0.3.2.11'.
Perhaps you need to add `aeson' to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
Failed, modules loaded: none.在本例中,scratch.hs希望导入Data.Aeson.Generic,但aeson不在库的build-depends中(非常正确),而是在我的用户包数据库中。
那我该怎么处理这件事?我可以想象这些类别中的任何一个都有答案,但也许有些类别我忽略了:
cabal-dev创建的沙箱一起使用来自用户包数据库的包的方法。(也许是滚动我自己的cabal-dev ghci风格的脚本?)我知道我可以在全球范围内安装这个包,但是我不愿意以这种方式污染我的全局包数据库( cabal-dev明确地阻止了这一点)。
非常感谢你的建议。
发布于 2011-09-19 16:23:03
我认为最简单的解决方案就是将您需要的东西安装到沙箱中。例如,如果你需要伊索的互动剧本:
~/myproject$ cabal-dev install aeson
~/myproject$ cabal-dev ghci那么:set -package aeson应该在ghci中工作。
如果这是不够的,那么您需要从您的用户包数据库中使用大量的依赖项,并且不需要使用您的阴谋文件设置用于调用ghci的其他标志来调用ghc,然后您可以通过从沙箱访问包以及您的用户和全局包来调用非沙箱式ghci。例如( GHC 7.0.3):
~/myproject$ GHC_PACKAGE_PATH=./cabal-dev/packages-7.0.3: ghci(请注意GHC_PACKAGE_PATH末尾的冒号以及该冒号与ghci之间的空格。)
https://stackoverflow.com/questions/7432211
复制相似问题