3

在 npm 中,依赖项安装在node_modules相对于依赖包目录的目录中。每个包都将其依赖项存储在自身内部。

然而,对于 Cabal,安装包总是全局安装(即在 中~/.cabal),这是噩梦和眼泪的完美配方,因为不同版本的包会相互冲突,一切都会失败和出错。

我想在本地安装 Cabal 包,即在我自己的包的子目录中,而不是全局安装。这些包的所有依赖项都会做同样的事情。我的包的目录树示例如下所示:

my_package/
  dependencies/
    json/
      dependencies/
        foo/
          etc...
        bar/
          etc...
    mtl/
      etc...
  my_package.cabal
  src/
    Main.hs

这可能吗,如果可以,怎么做?

4

1 回答 1

4

编辑:对于较新版本的 cabal,您应该使用cabal sandboxes,现在是内置的,而不是 cabal-dev。

看看这个cabal-dev工具。它类似于virtualenvPython。

基本上,在您将使用命令的地方cabal,使用cabal-dev. 因此,要安装您正在处理的软件包,请转到该目录并执行cabal-dev install. 你也可以ghc-pkg通过cabal-dev,这样你就可以做类似的事情cabal-dev ghc-pkg unregister foo-bar。此外,您也可以从GHCi它开始:cabal-dev ghci.

默认情况下,cabal-dev将包安装到cabal-dev项目内的目录中——这就是您dependencies在示例中所称的。

于 2013-01-12T17:05:00.670 回答