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
,然后修改版本。
但是,如何在全球范围内安装修改后的“本地”包?
这里的最佳做法是什么?
由于
答案 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中的“最常用”解决方案。