0

运行 cabal install 时得到以下 bash 脚本。

看起来它抱怨 http-enumerator 所需的许多软件包不可用。我不确定打印输出的最后一行中的“Backjump”是什么意思。

如何解决包依赖关系?

$ cabal install http-enumerator
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: http-enumerator-0.7.3.3 (user goal)
next goal: asn1-data (dependency of http-enumerator-0.7.3.3)
rejecting: asn1-data-0.7.1, 0.7.0 (conflict: http-enumerator =>
asn1-data>=0.5.1 && <0.7)
trying: asn1-data-0.6.1.3
next goal: text (dependency of asn1-data-0.6.1.3)
rejecting: text-1.2.0.0/installed-18f... (conflict: text =>
bytestring==0.10.4.0/installed-6da..., http-enumerator => bytestring>=0.9.1.4
&& <0.10)
trying: text-1.2.0.4
next goal: certificate (dependency of http-enumerator-0.7.3.3)
rejecting: certificate-1.3.9, 1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.3, 1.3.2, 1.3.1,
1.3.0, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0
(conflict: http-enumerator => certificate>=1.1 && <1.2)
trying: certificate-1.1.1
next goal: tls-extra (dependency of http-enumerator-0.7.3.3)
rejecting: tls-extra-0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.1, 0.6.0, 0.5.1, 0.5.0
(conflict: http-enumerator => tls-extra>=0.4.3 && <0.5)
rejecting: tls-extra-0.4.7.1, 0.4.7, 0.4.6.1, 0.4.6, 0.4.5 (conflict:
certificate==1.1.1, tls-extra => certificate>=1.2.0 && <1.3.0)
rejecting: tls-extra-0.4.4, 0.4.3 (conflict: text==1.2.0.4, tls-extra =>
text>=0.5 && <1.0)
rejecting: tls-extra-0.4.2.1, 0.4.2, 0.4.1, 0.4.0, 0.3.1, 0.3.0, 0.2.3, 0.2.2,
0.2.1, 0.2.0, 0.1.9, 0.1.8, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3, 0.1.2, 0.1.1,
0.1.0 (conflict: http-enumerator => tls-extra>=0.4.3 && <0.5)
Backjump limit reached (change with --max-backjumps).

谢谢!

4

1 回答 1

1

通常,发生此类问题是因为您尝试安装 package A,这取决于(直接或间接) package B。但是,您已经安装了 package ,这C也取决于 package B,但链接的版本不适用于.BCA

在某些情况下,您可以使用以下方法解决此类问题:

cabal install --max-backjumps=-1 --reorder-goals <pkg-name>

...但这只有时有效。解决此类问题的一种更简洁的方法是使用沙盒。如果您不需要两者A并且C在同一个沙箱中,这将有所帮助,或者您可以重新链接C到不同版本的B. 你可以在沙盒中做你想做的事,而不会弄乱你的主要 Haskell 安装。

如果你自己写过AC你可能需要检查你的包的依赖关系并进行调整。我将把部分输出翻译成英文,给你一个如何诊断依赖问题的例子。

$ cabal install http-enumerator
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: http-enumerator-0.7.3.3 (user goal)

你要求http-enumerator。最新版本是 0.7.3.3,所以我会尝试安装它。

next goal: asn1-data (dependency of http-enumerator-0.7.3.3)

现在,http-enumerator-0.7.3.3需要包asn1-data,所以让我尝试安装它。

rejecting: asn1-data-0.7.1, 0.7.0 (conflict: http-enumerator =>
asn1-data>=0.5.1 && <0.7)

最新的两个版本asn1-data是 0.7.1 和 0.7.0。但http-enumerator-0.7.3.3需要较早版本的asn1-data. 所以让我试试旧版本的asn1-data

trying: asn1-data-0.6.1.3

下一个可用版本asn1-data是 0.6.1.3。

next goal: text (dependency of asn1-data-0.6.1.3)

但是那个版本的asn1-datarequires text,所以我需要先安装它。

rejecting: text-1.2.0.0/installed-18f... (conflict: text =>
bytestring==0.10.4.0/installed-6da..., http-enumerator => bytestring>=0.9.1.4
&& <0.10)

最新版本text是 1.2.0.0,但这不起作用,因为它需要bytestringhttp-enumerator想要的不同版本。所以让我试试旧版本的text.

trying: text-1.2.0.4
next goal: certificate (dependency of http-enumerator-0.7.3.3)

现在,那个版本的textrequires certificate,所以我需要先安装它。

rejecting: certificate-1.3.9, 1.3.8, 1.3.7, 1.3.6, 1.3.5, 1.3.3, 1.3.2, 1.3.1,
1.3.0, 1.2.9, 1.2.8, 1.2.7, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0
(conflict: http-enumerator => certificate>=1.1 && <1.2)

但是所有这些版本certificate都与http-enumerator.

trying: certificate-1.1.1

终于有点成功了。我可以使用certificate-1.1.1并满足asn1-data text.

next goal: tls-extra (dependency of http-enumerator-0.7.3.3)

http-enumerator-0.7.3.3也需要tls-extra

rejecting: tls-extra-0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.1, 0.6.0, 0.5.1, 0.5.0
(conflict: http-enumerator => tls-extra>=0.4.3 && <0.5)

我们不能使用 的最新版本,tls-extra因为它们与http-enumerator.

rejecting: tls-extra-0.4.7.1, 0.4.7, 0.4.6.1, 0.4.6, 0.4.5 (conflict:
certificate==1.1.1, tls-extra => certificate>=1.2.0 && <1.3.0)

我们不能使用这些版本,tls-extra因为它们与certificate.

rejecting: tls-extra-0.4.4, 0.4.3 (conflict: text==1.2.0.4, tls-extra =>
text>=0.5 && <1.0)

我们不能使用这些版本,tls-extra因为它们与text.

rejecting: tls-extra-0.4.2.1, 0.4.2, 0.4.1, 0.4.0, 0.3.1, 0.3.0, 0.2.3, 0.2.2,
0.2.1, 0.2.0, 0.1.9, 0.1.8, 0.1.7, 0.1.6, 0.1.5, 0.1.4, 0.1.3, 0.1.2, 0.1.1,
0.1.0 (conflict: http-enumerator => tls-extra>=0.4.3 && <0.5)

并且旧版本tls-extra不兼容http-enumerator.

Backjump limit reached (change with --max-backjumps).

我放弃!

于 2015-02-02T18:51:41.740 回答