对于Stack,当我尝试为Spock使用堆栈安装时,它会给我这个错误(请参阅下文)。
我试图自己安装每个软件包(单个软件包),但没有用。 我尝试按照Haskell Stack package installation error中的答案进行操作,但这也不起作用。
`错误:在构建构建计划时,遇到以下异常:
在Spock-0.13.0.0的依赖项中: Spock-core必须匹配> = 0.13,但是堆栈配置没有指定的版本(最新 匹配的版本是0.13.0.0) 重新路由必须匹配> = 0.5,但堆栈配置没有指定的版本(最新匹配 版本是0.5.0.0) stm容器必须匹配> = 0.2 && <0.3,但是堆栈配置没有指定的版本 (最新的匹配版本是0.2.16) 因为Spock是构建目标,所以需要。
一些不同的解决方法:
考虑尝试“堆栈求解器”,它使用cabal-install求解器尝试查找一些 工作版本配置。在处理许多复杂的事件时可以很方便 约束错误,但结果可能无法预测。
建议采取的措施:尝试将以下内容添加到您的额外行动中 在C:\ Windows \ system32 \ stack.yaml中:
Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a 重新路由-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3 stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1
计划构建失败。
我要安装时没有错误。
答案 0 :(得分:0)
此错误中的重要内容如下:
在Spock-0.13.0.0的依赖项中:Spock-core必须匹配> = 0.13,但是堆栈配置没有指定的版本
基本上,这是正在发生的事情:主要的Haskell软件包存储库是Hackage。但是,Stack从其自己的存储库(称为Stackage)中获取其软件包。正如首页所说:
Stackage快照包含来自Hackage的固定软件包版本……这是一组精心设计的软件包,可以很好地协同工作
但是,Stackage存在一个主要问题:它并不包含Hackage中的每个软件包。这由以下事实表明:您正在使用的Stackage快照中该软件包没有指定的版本。但这就是Stack的错误信息所说的!因此,以通俗的英语来说,来自Stack的错误表明Spock-core
不包含在您选择的快照中。
那么,我们该如何解决呢?好吧,可以手动告诉Stack使用哪个软件包版本。实际上,错误消息中包含执行此操作的说明:
* Recommended action: try adding the following to your extra-deps in C:\Windows\system32\stack.yaml: - Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a - reroute-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3 - stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1
在这里,C:\Windows\system32\stack.yaml
是全局堆栈配置文件的路径。要消除该错误,您需要打开该文件并找到以extra-deps:
开头的行。然后,删除该行并将其替换为错误消息中的以下信息:
extra-deps:
- Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a
- reroute-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3
- stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1
这会通知Stack您要使用Spock-core
的0.13.0.0版本,reroute
的0.5.0.0版本和0.2.16 stm-containers
的版本。通常,Stack可以使用适当的Stackage快照中的信息自行找出该信息,但是在这种情况下,快照不包含有关这三个软件包的信息,因此您必须自己指定此信息。