Haskell Stack包安装错误

时间:2017-02-09 16:42:10

标签: haskell haskell-stack

user$: stack install dictionaries

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for dictionaries-0.1.0.0:
    binary-0.8.3.0 must match >=0.7.5 && <0.8 (latest applicable is 0.7.6.1)
    time-1.6.0.1 must match >=1.5.0 && <1.6 (latest applicable is 1.5.0.1)

使用上面的命令,我想全局安装dictionaries包。

我有什么选择? 我打算stack unpack dictionaries,然后修改版本。 但是,如何在全球范围内安装修改后的“本地”包?

这里的最佳做法是什么?

由于

2 个答案:

答案 0 :(得分:6)

最简单的一个:将allow-newer: true添加到stack.yaml

在这种情况下,它将成为解决方案。它解决了像你这样的上限版本问题。但当然存在构建失败的可能性。

也许可能的一个:将解析器改为每晚最新

有时在夜间快照上会发生这种失败。并且通常会通过库更新和新的夜间快照进行修复。如果您使用旧快照,请将其更改为最新。或等待可能是解决方案之一。

最常见的一个:依赖于修改后的本地包

您可以通过将包路径添加到stack.yaml packages:来实现。然后堆栈将使用它而不是快照。

你想要的方式可能不是一个好主意。即使这是可能的,您将如何处理许多版本的快照案例?应该为每个包指定本地依赖项。

答案 1 :(得分:2)

  

使用上面的命令,我想全局安装dictionaries包。

(初步说明:通过“全球”,我假设您的意思是全局为您的用户,而不是系统范围的安装。)

dictionaries is not in any Stackage snapshot。据我所知,这意味着你不能全局安装它,因为只有当包在快照中时,它才是一个选项。参看Stack issue #2656 - 虽然那里描述的计划功能听起来像你想要做的,但有一个警告:

  

当它不与--copy-bins一起使用时,如果有目标没有可执行文件,也会发出警告,因为这些都表明对它的工作方式存在误解。

既然如此,我的建议是使用the packages field with an extra-dep key安装每个项目的软件包 - 也就是jeiea's answer中的“最常用”解决方案。