我正在尝试使用沙箱构建我的包。没有它,它会编译并像魅力一样工作。一旦我介绍了一个沙箱,虽然cabal说它无法解决依赖关系。在我看来,这些冲突看起来并不像是冲突。
项目结构如下:
application (depends on library-base, library-impl1 and library-impl2)
library
├ library-base
├ library-impl1 (depends on library-base)
└ library-impl2 (depends on library-base)
这些是我按顺序运行的命令
rm -rf ~/.cabal
rm -rf ~/.ghc
cabal update
rm -f cabal.sandbox.config
rm -rf .cabal-sandbox
cabal sandbox init
cabal sandbox add-source $LIB_HOME/library-base
cabal sandbox add-source $LIB_HOME/library-impl1
cabal sandbox add-source $LIB_HOME/library-impl2
cabal install --only-dependencies --force-reinstalls && cabal build
cabal install --only-dependencies --force-reinstalls
产生以下输出:
Resolving dependencies...
cabal: Could not resolve dependencies:
next goal: lens (dependency of library-base-0.1.0.0)
rejecting: lens-4.15.4/installed-I5C... (conflict: bifunctors==5.4.2, lens =>
bifunctors==5.4.2/installed-Hs7...)
trying: lens-4.15.4
trying: unordered-containers-0.2.8.0/installed-1tq... (dependency of
lens-4.15.4)
next goal: text (dependency of lens-4.15.4)
rejecting: text-1.2.2.2/installed-3EN... (conflict: binary==0.8.5.1, text =>
binary==0.8.3.0/installed-0.8...)
trying: text-1.2.2.2
next goal: hashable (dependency of lens-4.15.4)
rejecting: hashable-1.2.6.1/installed-2nP... (conflict: text==1.2.2.2,
hashable => text==1.2.2.2/installed-3EN...)
rejecting: hashable-1.2.6.1, hashable-1.2.6.0, hashable-1.2.5.0,
hashable-1.2.4.0, hashable-1.2.3.3, hashable-1.2.3.2, hashable-1.2.3.1,
hashable-1.2.3.0, hashable-1.2.2.0, hashable-1.2.1.0, hashable-1.2.0.10,
hashable-1.2.0.9, hashable-1.2.0.8, hashable-1.2.0.7, hashable-1.2.0.6,
hashable-1.2.0.5, hashable-1.2.0.4, hashable-1.2.0.3, hashable-1.2.0.2,
hashable-1.2.0.1, hashable-1.2.0.0, hashable-1.1.2.5, hashable-1.1.2.4,
hashable-1.1.2.3, hashable-1.1.2.2, hashable-1.1.2.1, hashable-1.1.2.0,
hashable-1.1.1.0, hashable-1.1.0.0, hashable-1.0.1.1, hashable-1.0.1.0,
hashable-1.0.0 (conflict: unordered-containers =>
hashable==1.2.6.1/installed-2nP...)
Dependency tree exhaustively searched.
有没有人知道这里发生了什么?
答案 0 :(得分:3)
首先,我将解释错误消息所说的内容。然后我将尝试对为什么会出现错误进行一些猜测。然后我会提出一些后续步骤。
错误说:
通常沙盒会忽略本地包数据库,所以这告诉我它在哪里谈论"已安装的版本"上面是从您的全局包数据库或现有的沙箱中选择它们。您声称刚刚创建了此沙箱并立即运行此cabal install
命令。如果这是真的(是吗?或者这是该工具的第二次运行?为什么你有--force-reinstalls
?),它无法从你的沙箱中挑选已安装的版本,因此必须从你的沙箱中挑选它们全局包数据库。将内容安装到全局包数据库通常被认为是一个坏主意,因为正确清除混乱/损坏的全局包数据库要困难得多。在未来的建议下接受它。
现在,为了取得进步,我会尝试以下两种方法之一:
通过减少搜索空间,您通常可以从cabal中获得明显更好的错误消息;因为它只会在错误中打印搜索空间的一部分,所以有时需要将其引导到空间中有问题的部分,这样它就会向您显示错误中的真正问题。如果您非常确定已安装的unordered-containers等版本与您的库很匹配,请考虑
cabal install --only-dependencies --constraint 'unordered-containers installed' --constraint 'binary installed'
等等,它提到尝试重建的任何其他软件包,你不希望它重建。或者,如果您不想要其中一个已安装的版本,则可以在--constraint
中添加确切的版本约束。不要包括--force-reinstalls
,基本上都是。