如何用 cabal 降级基地?
How to downgrade base with cabal?
我正在尝试在 Windows 10 上安装一个名为 clanki 的程序。在它的安装文档中说要使用 'cabal install clanki'。我下载了 cabal,然后是 ghc。现在我 运行 遇到包 base
.
的版本问题
$ cabal install clanki
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: clanki-1.2.7 (user goal)
next goal: base (dependency of clanki-1.2.7)
rejecting: base-4.9.0.0/installed-4.9... (conflict: clanki => base<=4.9.0)
rejecting: 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)
Dependency tree exhaustively searched.
所以 clanki 要求 base 早于 4.9(stack 比 cabal 说得更清楚),然后我想将 base 降级到 4.8.2.0。当我尝试 ghc-pkg unregister base
时,它不允许我这样做。即使 --force
:
$ ghc-pkg unregister base --force
unregistering would break the following packages: xhtml-3000.2.1 Win32-2.3.1.1 transformers-0.5.2.0 time-1.6.0.1 template-haskell-2.11.0.0 process-1.4.2.0 pretty-1.1.3.3 hpc-0.6.0.3 hoopl-3.10.2.1 haskeline-0.7.2.3 ghci-8.0.1 ghc-boot-th-8.0.1 ghc-boot-8.0.1 ghc-8.0.1 filepath-1.4.1.0 directory-1.2.6.2 deepseq-1.4.2.0 containers-0.5.7.1 Cabal-1.24.0.0 bytestring-0.10.8.1 binary-0.8.3.0 array-0.5.1.1 (ignoring)
正如我提到的,我也尝试过使用堆栈,但最后它也归结为错误的 base 版本。我怎样才能降级这个包?
你不能。 base
已修复到 GHC 安装;获得不同版本的唯一方法是安装较旧的编译器,即 GHC-7.10。 stack
会自动为您执行此操作,但我不确定这是否是最佳解决方案。
很可能,包 将 实际上与 GHC-8.0 一起工作;事实上约束 base <= 4.9.0
表明它应该。该约束没有多大意义,因为它只允许 pre-first subrevision;它可能真的应该是 base < 4.10
.
所以最好的办法是从 github 下载源代码,其中 base
实际上没有上限,然后使用 cabal install
从本地文件夹安装它.如果可行,通知作者放宽对Hackage的限制。
如果它不能在 GHC-8.0 中编译,最好的办法还是通过编辑源代码使其工作,然后提交拉取请求。
或者,我会求助于 stack 以使用较旧的 GHC 安装软件包。为此,请使用 base < 4.9
约束 获取源代码 (您需要将其插入 github 代码),以及 运行 stack setup
、stack init
和 stack install
。
根据@leftroundabout 的回答,这个包中 base
的上限是假的。在这种情况下,或者只是如果你觉得大胆,你可以指示 cabal
使用适当的选项忽略依赖项的上限:
cabal install clanki --allow-newer=base
我正在尝试在 Windows 10 上安装一个名为 clanki 的程序。在它的安装文档中说要使用 'cabal install clanki'。我下载了 cabal,然后是 ghc。现在我 运行 遇到包 base
.
$ cabal install clanki
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: clanki-1.2.7 (user goal)
next goal: base (dependency of clanki-1.2.7)
rejecting: base-4.9.0.0/installed-4.9... (conflict: clanki => base<=4.9.0)
rejecting: 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)
Dependency tree exhaustively searched.
所以 clanki 要求 base 早于 4.9(stack 比 cabal 说得更清楚),然后我想将 base 降级到 4.8.2.0。当我尝试 ghc-pkg unregister base
时,它不允许我这样做。即使 --force
:
$ ghc-pkg unregister base --force
unregistering would break the following packages: xhtml-3000.2.1 Win32-2.3.1.1 transformers-0.5.2.0 time-1.6.0.1 template-haskell-2.11.0.0 process-1.4.2.0 pretty-1.1.3.3 hpc-0.6.0.3 hoopl-3.10.2.1 haskeline-0.7.2.3 ghci-8.0.1 ghc-boot-th-8.0.1 ghc-boot-8.0.1 ghc-8.0.1 filepath-1.4.1.0 directory-1.2.6.2 deepseq-1.4.2.0 containers-0.5.7.1 Cabal-1.24.0.0 bytestring-0.10.8.1 binary-0.8.3.0 array-0.5.1.1 (ignoring)
正如我提到的,我也尝试过使用堆栈,但最后它也归结为错误的 base 版本。我怎样才能降级这个包?
你不能。 base
已修复到 GHC 安装;获得不同版本的唯一方法是安装较旧的编译器,即 GHC-7.10。 stack
会自动为您执行此操作,但我不确定这是否是最佳解决方案。
很可能,包 将 实际上与 GHC-8.0 一起工作;事实上约束 base <= 4.9.0
表明它应该。该约束没有多大意义,因为它只允许 pre-first subrevision;它可能真的应该是 base < 4.10
.
所以最好的办法是从 github 下载源代码,其中 base
实际上没有上限,然后使用 cabal install
从本地文件夹安装它.如果可行,通知作者放宽对Hackage的限制。
如果它不能在 GHC-8.0 中编译,最好的办法还是通过编辑源代码使其工作,然后提交拉取请求。
或者,我会求助于 stack 以使用较旧的 GHC 安装软件包。为此,请使用 base < 4.9
约束 获取源代码 (您需要将其插入 github 代码),以及 运行 stack setup
、stack init
和 stack install
。
根据@leftroundabout 的回答,这个包中 base
的上限是假的。在这种情况下,或者只是如果你觉得大胆,你可以指示 cabal
使用适当的选项忽略依赖项的上限:
cabal install clanki --allow-newer=base