【发布时间】:2014-08-06 12:29:21
【问题描述】:
我有以下阴谋集团地狱的例子:
(使用在 x86_64 GNU/Linux 上从源代码构建的 ghc-7.8.3, 和用户安装:在 .cabal/config 中为真)
1) 有时,transformers-0.4.0.0 已安装(在用户空间中,从全局空间中隐藏 (?)transformers-0.3)
2) 之后,几个库选择了transformers-0.4
3) 然后,我安装了hint,它依赖于ghc,它依赖于transformers-0.3,并且不能改变,因为ghc 是硬连线的。
结果:我不能使用 2) 中的库并在一个项目中提示。
作为一种解决方法,我将 constraint: transformers installed 放入 .cabal/config 中,然后重新构建。有没有更好的方法来处理这种情况 - 或者一开始就避免这种情况?
【问题讨论】:
-
尽可能频繁地使用
cabal sandbox,并且只安装像happy、alex这样的二进制文件。更好的是,还可以将它们安装在沙盒环境中,并添加指向~/bin/(或$PATH中的另一个目录)的链接 -
这将如何改变上述情况?您是否暗示沙盒机制会自行解决不更新转换器的问题?怎么可能?
-
如果在沙盒中使用 cabal,则不会更改全局包。
-
是(全局 = 用户全局)。问题是我需要同时在同一个沙箱中构建 2) 和 3)?但就我而言,两者都是大型项目。
-
除了 cabal 沙箱(在版本 18 中引入)之外,还有另一个用于隔离环境的不错的包,称为 hsenv,适合 esp。适用于具有多个 ghc 版本的情况。