cabal表示“以下软件包可能会因重新安装而损坏”是什么意思?

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

我已经看到在运行cabal v1-install时弹出此消息几次,但建议还是使用--force-reinstalls进行安装。因为我对Cabal不太了解,所以我不确定为什么软件包会由于重新安装而损坏。有人可以在此消息后面的背景信息中填写我吗?

haskell cabal
1个回答
3
投票

致将来的读者注意:此讨论是关于历史问题的。出于实际目的,如果您使用Cabal 3,则可以放心地忽略所有这些内容。

该问题与传递依赖有关。例如,假设我们在特定版本上安装了以下三个软件包:

  • A-1.0;
  • B-1.0,取决于A;和
  • [C-1.0,取决于B,但不明确取决于A

然后,我们将安装A-1.1,这似乎可以正常工作:

  • A-1.1将被安装,但是较旧的A-1.0版本将被保留,仅出于使用它构建的其他软件包的目的;
  • B-1.0将继续使用A-1.0;和
  • [C-1.0将继续使用B-1.0

但是,如果我们出于任何原因尝试重新安装B-1.0(而不是例如更新到B-1.1,都会有麻烦:

  • [A-1.1A-1.0仍可用于需要它们的其他软件包;
  • B-1.0,但是将根据A-1.1进行重建,无法保留第二版相同版本的B;和
  • C-1.0是针对替换的B-1.0(取决于A-1.0)构建的,现在将被破坏。

v1-install提供了防范此类危险重新安装的防护措施。使用--force-reinstalls将禁用该防护措施。

有关周围问题的详细说明,请参见Albert Y. C. Lai的Storage and Identification of Cabalized Packages(特别是,我在此使用的示例本质上是其推论:鸽子投掷骗局的摘要)。

虽然Cabal 1在其更高版本中能够在上述情况下检测到重新安装已更改B,即使版本号保持不变(这使得保护措施得以实现),却无法同时保持B-1.0的两个变体。另一方面,Cabal 3可以做到这一点,从而消除了问题。

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