在npm中,依赖关系安装在相对于依赖包的目录的目录node_modules
中。每个包都将其依赖项存储在自身内。
然而,使用Cabal,安装软件包总是全局安装(即~/.cabal
),这是一个完美的噩梦和眼泪的配方,因为不同版本的软件包会相互冲突,一切都会失败并且去错。
我想在本地安装Cabal软件包 ,即在我自己的软件包的子目录中,而不是全局安装。这些包的所有依赖关系都会这样做。我的包的目录树的示例可能如下所示:
my_package/
dependencies/
json/
dependencies/
foo/
etc...
bar/
etc...
mtl/
etc...
my_package.cabal
src/
Main.hs
这可能吗,如果可以,怎么做?
答案 0 :(得分:4)
编辑:对于较新版本的cabal,您应该使用cabal sandboxes,它们现在是内置的,而不是cabal-dev。
查看cabal-dev
工具。它类似于Python的virtualenv
。
基本上,您将使用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
。