【问题标题】:cabal hell with dependencies of ghc-baked in packages带有 ghc-baked 依赖项的阴谋集团地狱
【发布时间】: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,并且只安装像happyalex这样的二进制文件。更好的是,还可以将它们安装在沙盒环境中,并添加指向~/bin/(或$PATH 中的另一个目录)的链接
  • 这将如何改变上述情况?您是否暗示沙盒机制会自行解决不更新转换器的问题?怎么可能?
  • 如果在沙盒中使用 cabal,则不会更改全局包。
  • 是(全局 = 用户全局)。问题是我需要同时在同一个沙箱中构建 2) 和 3)?但就我而言,两者都是大型项目。
  • 除了 cabal 沙箱(在版本 18 中引入)之外,还有另一个用于隔离环境的不错的包,称为 hsenv,适合 esp。适用于具有多个 ghc 版本的情况。

标签: haskell cabal


【解决方案1】:

有没有更好的方法来处理这种情况。

不,你的方法是明智的。

还是一开始就避免?

棘手。大多数人不会根据ghc 构建东西,因此对他们来说升级transformers 等是有意义的。因此,您的约束不是合适的默认值。

正如 Zeta 所写:沙盒可以提供帮助。如果您在 (2) 中为您的安装使用了沙箱,并为尝试同时使用提示和 (2) 的任何东西使用了另一个沙箱,那么它只会为您正在构建的任何东西构建这些依赖项。

这是以不共享您正在做的各种事情之间的任何空间或构建时间为代价的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多