【问题标题】:How to handle following dependency conflict in Cabal?如何处理 Cabal 中的以下依赖冲突?
【发布时间】:2023-01-26 01:08:42
【问题描述】:

当我尝试将 scotty 包添加到我的多项目 cabal 文件时,出现以下依赖冲突。我不太确定这是什么意思。

harshal@Harshals-Linux hello-haskell % cabal build

Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] trying: playground-0.1.0.0 (user goal)
[__1] trying: scotty-0.12.1 (dependency of playground)
[__2] trying: warp-3.3.23 (dependency of scotty)
[__3] trying: unix-compat-0.6 (dependency of warp)
[__4] trying: unix-2.7.3/installed-2.7.3 (dependency of warp)
[__5] next goal: directory (dependency of playground)
[__5] rejecting: directory-1.3.7.1/installed-1.3.7.1 (conflict: playground =>
directory>=1.3.8.0)
[__5] rejecting: directory-1.3.8.0 (conflict: unix==2.7.3/installed-2.7.3,
directory => unix>=2.8.0 && <2.9)
[__5] rejecting: directory-1.3.7.1 (conflict: playground =>
directory>=1.3.8.0)
[__5] skipping: directory-1.3.7.0, directory-1.3.6.2, directory-1.3.6.1,
directory-1.3.6.0, directory-1.3.5.0, directory-1.3.4.0, directory-1.3.3.2,
directory-1.3.3.1, directory-1.3.3.0, directory-1.3.2.2, directory-1.3.2.1,
directory-1.3.2.0, directory-1.3.1.5, directory-1.3.1.4, directory-1.3.1.3,
directory-1.3.1.2, directory-1.3.1.1, directory-1.3.1.0, directory-1.3.0.2,
directory-1.3.0.1, directory-1.3.0.0, directory-1.2.7.1, directory-1.2.7.0,
directory-1.2.6.3, directory-1.2.6.2, directory-1.2.5.1, directory-1.2.5.0,
directory-1.2.4.0, directory-1.2.3.1, directory-1.2.3.0, directory-1.2.2.1,
directory-1.2.2.0, directory-1.2.1.0, directory-1.2.0.1, directory-1.2.0.0,
directory-1.1.0.2, directory-1.1.0.1, directory-1.1.0.0, directory-1.0.1.2,
directory-1.0.1.1, directory-1.0.1.0, directory-1.0.0.3, directory-1.0.0.0,
directory-1.2.6.1 (has the same characteristics that caused the previous
version to fail: excluded by constraint '>=1.3.8.0' from 'playground')
[__5] fail (backjumping, conflict set: directory, playground, unix)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: directory, unix, playground,
unix-compat, warp, unix-compat:portable, scotty
Try running with --minimize-conflict-set to improve the error message.

我该如何解决这种依赖冲突?

【问题讨论】:

  • 我认为 scotty 依赖于 directory-1.3.7.1 但你有一个用户约束 directory-1.3.8。也许你可以用cabal build --allow-newer解决
  • 是的,--allow-newer 通常是第一个尝试的。通常冲突根本不是真正的冲突,只是一些包维护者有一段时间没有放松他们的上限。
  • 我尝试使用 --allow-newer,解析器最终解析了依赖关系,但编译失败。我猜它还会选择其他一些无法编译的最新软件包。

标签: haskell


【解决方案1】:

这是什么意思:

  • playground-0.1.0.0依赖于directory &gt;= 1.3.8.0
  • directory-1.3.8.0directory &gt;= 1.3.8.0 唯一明显的解决方案
  • directory-1.3.8.0依赖于unix &gt;= 2.8.0 &amp;&amp; &lt;2.9
  • 我们已经承诺unix==2.7.3,它不满足该约束

因此,您可以尝试的一件事是通过添加顶级约束来提示您要选择更新的unix

% cabal build --constraint `unix >=2.8.0 && <2.9`

顶级约束比通过搜索依赖项找到的约束更早“可用”,因此可以更好地约束较早的选择。 (我相信这个属性——约束以某种不完全用户可见的顺序得到解决和提交——是为了使依赖关系解析算法更有效。真可惜。)

【讨论】:

  • 阴谋集团说 --build-depends 是无法识别的“构建”选项。但我明白了问题的要点。我无法更好地阅读依赖冲突堆栈跟踪。
  • @HarshalPatil 抱歉,cabal build 标志被命名为--constraint。我会尽快更新答案以更正此问题。
  • @HarshalPatil 至于阅读依赖冲突痕迹......除了蛮力之外没有什么可做的。慢慢来,不要害怕回顾你已经读过的东西。
  • 在我之前的评论中,我的意思是“现在”而不是“不是”:(。但是,是的。我确实知道如何解决依赖冲突错误。此外,这篇文章进一步帮助:well-typed.com/blog/2015/03/qualified-goals
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2012-08-24
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多