堆栈安装使用哪个堆栈快照?
Which stackage snapshot does stack install use?
正在尝试 运行
stack install git-mediate
(根据 git-mediate
's instructions)
我收到有关依赖包版本的错误消息:
Error: While constructing the build plan, the following exceptions were encountered:
In the dependencies for git-mediate-1.0.8:
Diff-0.3.4 from stack configuration does not match >=0.4 (latest matching version is 0.4.0)
needed since git-mediate is a build target.
Some different approaches to resolving this:
* Set 'allow-newer: true' in /Users/yairchu/.stack/config.yaml to ignore all version constraints and build anyway.
* Recommended action: try adding the following to your extra-deps in /Users/yairchu/.stack/global-project/stack.yaml:
- Diff-0.4.0@sha256:b5cfbeed498f555a18774ffd549bbeff7a24bdfe5984154dcfc9f4328a3c2847,1275
Plan construction failed.
堆栈配置有 Diff-0.3.4
很奇怪,因为目前 LTS 和夜间堆栈快照 currently contain Diff-0.4.0
(lts-16.8
和 nightly-2020-10-13
)。
这个堆栈配置是什么,为什么它固定到旧版本的库?
stack
隐含地使用它在 ~/.stack/global-project/stack.yaml
中定义的 "global project"。要控制正在使用的堆栈快照,可以编辑此文件(或删除以使用最新的 LTS)
stack install
是 stack build --copy-bins
的别名,所以它实际上只是 stack build
加上将构建的可执行文件复制到 ~/.local/bin
.
的额外步骤
所以,真正的问题是“stack build
如何决定使用什么解析器?”好吧,如果你在命令行上提供它,它会使用那个,如:
stack install --resolver lts-16.18 git-mediate
如果不给出显式解析器,则默认取决于构建命令所在的位置运行。如果您 运行 它在堆栈项目中,它将默认为项目的 stack.yaml
文件中指定的解析器。例如:
stack new --resolver lts-16.0 exampleproject # create project with lts-16.0 resolver
cd exampleproject
stack build git-mediate # this will build git-mediate using lts-16.0
如果您在任何项目之外构建它,那么它会使用全局项目设置,这将是 ~/.stack/global-project/stack.yaml
中设置的任何 resolver
,如评论/其他答案中所述。
请注意,stack install
别名总是会将可执行文件复制到“全局”~/.local/bin
中,而不管它是在哪里构建的。因此,如果您在 exampleproject
目录中 运行 stack install git-mediate
,如上所述,您将获得使用 lts-16.0
构建的版本作为全局安装版本。
Soooo...小心你 运行 stack install
!
请注意,特别是关于 git-mediate
,最近有一个发布到 Stackage 的错误版本,如记录 here 所示。错误消息与您收到的消息略有不同,但根本问题可能是相同的。因此,如果您还没有修复构建问题,只需 运行ning stack update
无需修改解析器设置就可以解决构建问题。
正在尝试 运行
stack install git-mediate
(根据 git-mediate
's instructions)
我收到有关依赖包版本的错误消息:
Error: While constructing the build plan, the following exceptions were encountered:
In the dependencies for git-mediate-1.0.8:
Diff-0.3.4 from stack configuration does not match >=0.4 (latest matching version is 0.4.0)
needed since git-mediate is a build target.
Some different approaches to resolving this:
* Set 'allow-newer: true' in /Users/yairchu/.stack/config.yaml to ignore all version constraints and build anyway.
* Recommended action: try adding the following to your extra-deps in /Users/yairchu/.stack/global-project/stack.yaml:
- Diff-0.4.0@sha256:b5cfbeed498f555a18774ffd549bbeff7a24bdfe5984154dcfc9f4328a3c2847,1275
Plan construction failed.
堆栈配置有 Diff-0.3.4
很奇怪,因为目前 LTS 和夜间堆栈快照 currently contain Diff-0.4.0
(lts-16.8
和 nightly-2020-10-13
)。
这个堆栈配置是什么,为什么它固定到旧版本的库?
stack
隐含地使用它在 ~/.stack/global-project/stack.yaml
中定义的 "global project"。要控制正在使用的堆栈快照,可以编辑此文件(或删除以使用最新的 LTS)
stack install
是 stack build --copy-bins
的别名,所以它实际上只是 stack build
加上将构建的可执行文件复制到 ~/.local/bin
.
所以,真正的问题是“stack build
如何决定使用什么解析器?”好吧,如果你在命令行上提供它,它会使用那个,如:
stack install --resolver lts-16.18 git-mediate
如果不给出显式解析器,则默认取决于构建命令所在的位置运行。如果您 运行 它在堆栈项目中,它将默认为项目的 stack.yaml
文件中指定的解析器。例如:
stack new --resolver lts-16.0 exampleproject # create project with lts-16.0 resolver
cd exampleproject
stack build git-mediate # this will build git-mediate using lts-16.0
如果您在任何项目之外构建它,那么它会使用全局项目设置,这将是 ~/.stack/global-project/stack.yaml
中设置的任何 resolver
,如评论/其他答案中所述。
请注意,stack install
别名总是会将可执行文件复制到“全局”~/.local/bin
中,而不管它是在哪里构建的。因此,如果您在 exampleproject
目录中 运行 stack install git-mediate
,如上所述,您将获得使用 lts-16.0
构建的版本作为全局安装版本。
Soooo...小心你 运行 stack install
!
请注意,特别是关于 git-mediate
,最近有一个发布到 Stackage 的错误版本,如记录 here 所示。错误消息与您收到的消息略有不同,但根本问题可能是相同的。因此,如果您还没有修复构建问题,只需 运行ning stack update
无需修改解析器设置就可以解决构建问题。