“来自不可升级包的约束需要安装实例”在 cabal 构建时

问题描述 投票:0回答:1

我正在构建一个项目,其中

base^>=4.17.2.1
位于依赖项中。 Cabal 发出以下错误消息:

Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] trying: mu-0.1.0.0 (user goal)
[__1] next goal: base (dependency of mu)
[__1] rejecting: base-4.19.0.0/installed-e537 (conflict: mu =>
base^>=4.17.2.1)
[__1] skipping: base-4.19.1.0, base-4.19.0.0, base-4.18.2.1, base-4.18.2.0,
base-4.18.1.0, base-4.18.0.0 (has the same characteristics that caused the
previous version to fail: excluded by constraint '^>=4.17.2.1' from 'mu')
[__1] rejecting: base-4.17.2.1, base-4.17.2.0, base-4.17.1.0, base-4.17.0.0,
base-4.16.4.0, base-4.16.3.0, base-4.16.2.0, base-4.16.1.0, base-4.16.0.0,
base-4.15.1.0, base-4.15.0.0, base-4.14.3.0, base-4.14.2.0, base-4.14.1.0,
base-4.14.0.0, base-4.13.0.0, base-4.12.0.0, base-4.11.1.0, base-4.11.0.0,
base-4.10.1.0, base-4.10.0.0, base-4.9.1.0, base-4.9.0.0, base-4.8.2.0,
base-4.8.1.0, base-4.8.0.0, base-4.7.0.2, base-4.7.0.1, base-4.7.0.0,
base-4.6.0.1, base-4.6.0.0, base-4.5.1.0, base-4.5.0.0, base-4.4.1.0,
base-4.4.0.0, base-4.3.1.0, base-4.3.0.0, base-4.2.0.2, base-4.2.0.1,
base-4.2.0.0, base-4.1.0.0, base-4.0.0.0, base-3.0.3.2, base-3.0.3.1
(constraint from non-upgradeable package requires installed instance)
[__1] fail (backjumping, conflict set: base, mu)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, mu

显然Cabal已经找到了所需的

base-4.17.2.1
,如第四个
[__1]
, 但是由于“不可升级包的限制需要安装实例”而被拒绝。

这是构建被冻结的另一个实例。 Cabal 再次成功找到了所需的

base-4.17.2.1
,但随后由于同样的原因立即被拒绝。

Resolving dependencies...
Error: cabal: Could not resolve dependencies:
[__0] trying: mu-0.1.0.0 (user goal)
[__1] next goal: base (dependency of mu)
[__1] rejecting: base-4.19.0.0/installed-e537, base-4.19.1.0, base-4.19.0.0,
base-4.18.2.1, base-4.18.2.0, base-4.18.1.0, base-4.18.0.0 (constraint from
project config /Users/futar/Documents/code-projs/mu/cabal.project.freeze
requires ==4.17.2.1)
[__1] rejecting: base-4.17.2.1 (constraint from non-upgradeable package
requires installed instance)
[__1] rejecting: base-4.17.2.0, base-4.17.1.0, base-4.17.0.0, base-4.16.4.0,
base-4.16.3.0, base-4.16.2.0, base-4.16.1.0, base-4.16.0.0, base-4.15.1.0,
base-4.15.0.0, base-4.14.3.0, base-4.14.2.0, base-4.14.1.0, base-4.14.0.0,
base-4.13.0.0, base-4.12.0.0, base-4.11.1.0, base-4.11.0.0, base-4.10.1.0,
base-4.10.0.0, base-4.9.1.0, base-4.9.0.0, base-4.8.2.0, base-4.8.1.0,
base-4.8.0.0, base-4.7.0.2, base-4.7.0.1, base-4.7.0.0, base-4.6.0.1,
base-4.6.0.0, base-4.5.1.0, base-4.5.0.0, base-4.4.1.0, base-4.4.0.0,
base-4.3.1.0, base-4.3.0.0, base-4.2.0.2, base-4.2.0.1, base-4.2.0.0,
base-4.1.0.0, base-4.0.0.0, base-3.0.3.2, base-3.0.3.1 (constraint from
project config /Users/futar/Documents/code-projs/mu/cabal.project.freeze
requires ==4.17.2.1)
[__1] fail (backjumping, conflict set: base, mu)
After searching the rest of the dependency tree exhaustively, these were the
goals I've had most trouble fulfilling: base, mu

但是什么是“不可升级的软件包”以及它是哪个软件包? 另外安装实例需要什么?如果是

base-4.17.2.1
, 那么为什么它不像依赖项中的任何其他包一样由 Cabal 安装呢? 我很困惑。

haskell cabal
1个回答
0
投票

如果运行

ghcup list
,您将看到与
base-4.7.2.1
关联的 GHC 版本是 GHC 9.4.8。确保已安装:

$ ghcup install ghc 9.4.8

然后选择它并重建:

$ ghcup set ghc 9.4.8
$ cabal build

作为进一步的解释,Cabal 使用当前选择的 GHC 版本来构建您的项目。看来您可能选择了 GHC 9.8.1,因为当前安装的

base
软件包是
base-4.19.0.0

出现错误消息是因为此软件包与当前 GHC 版本相关,因此无法降级到

base-4.17.2.1
。 (此处,“不可升级”具有误导性;较新版本的 Cabal 已将此错误消息替换为“不可重新安装”。)

(请注意,Stack 的工作方式不同,因此

stack build
始终使用包指定的 GHC 版本进行构建,并且您不需要使用
ghcup set
。)

© www.soinside.com 2019 - 2024. All rights reserved.