所以我正在尝试安装一个包含大杂乱依赖集的包(在本例中为gitit)。来自hackage的直接cabal install
重建了我不想重建的大量库(与text
上的约束,network
上的约束,parsec
上的约束有关等我做了正确的事情,运行cabal unpack gitit
,手动编辑.cabal文件,并成功通过cabal configure
,cabal build
周期。到目前为止,非常好。
现在,我想运行一个cabal install
。在过去的好时光(去年)中,这只会安装已经构建的二进制文件和它们所属的文件。但是,现在,运行cabal install
会运行依赖项检查程序,它会确定我正在构建的所有程序包都不使用相同的parsec
等,并尝试重新安装它们反正的!即使我只是跑得很好cabal build
。什么是关闭它并获得旧的,不聪明的,完全可接受的行为的神奇旗帜?
答案 0 :(得分:4)
看着旗帜,似乎没有cabal install
这样做的任何迹象。在以前的时间,在cabal install
之前以及必须手动获取自己的软件包时,在运行runghc Setup install --user
之后,安装阶段的咒语是runghc Setup configure --prefix=$FOO --user
- 也许这会有用吗?如果我的内存正确提供,当你告诉它'安装'时,Setup.hs不会自动调用'build'。
现在,对于未来,如果你想避免这种令人讨厌的依赖性地狱,我强烈建议你使用cabal-dev
来沙箱你的包安装,永远不要触摸你的实际用户/全局包数据库,你刚才做的事情:
$ cabal unpack gitit
$ cd gitit-0.8.0.1 # latest hackage version
$ cabal-dev install
它将正确下载并安装所有必需的依赖项,如cabal安装,但它将通过创建包含自包含数据库数据库的./cabal-dev
目录来沙箱化它们。它永远不会触及~/.ghc/
中的全局或用户包db。 cabal-dev
有效地编辑cabal文件并处理钻石依赖问题Cabal面临着过去,cabal-install
手动下载包的方式已成为过去。
答案 1 :(得分:2)
事实证明,有一个--only
标志,只允许构建和安装该包,就像./Setup
路由一样。