解决Travis-CI上的cabal依赖性时出错

jmi*_*ite 2 haskell cabal cabal-install travis-ci hakyll

我正在尝试用Travis-CI建立我的Hakyll网站.但是,在我达到目前为止,在尝试将Hakyll安装为依赖项时,我遇到了依赖项错误.

我可以在我的机器上本地建造Hakyll而没有任何问题.什么可能导致依赖性错误,以及如何解决?有没有办法解决它而不实际硬编码每个依赖版本?

这是来自TravisCI的输出.

travis_fold:end:git.5
$ export PATH=/usr/local/ghc/$(ghc_find 7.6)/bin/:$PATH
travis_fold:start:cabal
$ cabal update
Config file path source is default config file.
Config file /home/travis/.cabal/config not found.
Writing default configuration to /home/travis/.cabal/config
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
travis_fold:end:cabal
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3
$ cabal --version
cabal-install version 1.18.0.2
using version 1.18.1 of the Cabal library 
travis_fold:start:before_install.1
$ cabal update
Downloading the latest package list from hackage.haskell.org
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install
travis_fold:end:before_install.1
travis_fold:start:before_install.2
$ cabal install hakyll pandoc
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: hakyll-4.5.3.0 (user goal)
trying: base-4.6.0.1/installed-8aa... (dependency of hakyll-4.5.3.0)
trying: hakyll-4.5.3.0:+checkexternal
trying: http-conduit-2.1.2.3 (dependency of hakyll-4.5.3.0:+checkexternal)
trying: http-client-0.3.3.2 (dependency of http-conduit-2.1.2.3)
trying: exceptions-0.6.1 (dependency of http-client-0.3.3.2)
trying: transformers-0.4.1.0 (dependency of http-conduit-2.1.2.3)
next goal: mtl (dependency of hakyll-4.5.3.0)
rejecting: mtl-2.2.1, 2.2.0.1, 2.2 (conflict: hakyll => mtl>=1 && <2.2)
rejecting: mtl-2.1.3.1, 2.1.2 (conflict: transformers==0.4.1.0, mtl =>
transformers==0.3.*)
rejecting: mtl-2.1.1, 2.1 (conflict: base==4.6.0.1/installed-8aa..., mtl =>
base<4.6)
rejecting: mtl-2.0.1.1 (conflict: transformers==0.4.1.0, mtl =>
transformers==0.2.*)
rejecting: mtl-2.0.1.0, 2.0.0.0 (conflict: base==4.6.0.1/installed-8aa..., mtl
=> base<4.6)
rejecting: mtl-1.1.1.1, 1.1.1.0, 1.1.0.2, 1.1.0.1, 1.1.0.0, 1.0 (conflict:
exceptions => mtl>=2.0 && <2.3)
Backjump limit reached (change with --max-backjumps).

[31;1mThe command "cabal install hakyll pandoc" failed and exited with 1 during .[0m

Your build has been stopped.
Run Code Online (Sandbox Code Playgroud)

如果有任何其他输出有用,请告诉我,我可以提供.

GS *_*ica 5

如果你Backjump limit reached从cabal-install 获得的话,首先要尝试的是使用选项--max-backjumps=-1,这意味着"彻底搜索",但如果它最终需要花费几十分钟,你需要打断它或依赖Travis-CI超时.对于大而有限的搜索,您也可以使用500或1000而不是-1 - 默认值为200.

如果这不起作用,那么尝试选择特定项目以使用该选项约束到特定版本--constraint 'foo==0.1.0.0,最好是您实际知道的应该可以使用相同的GHC版本安装.

在这种特殊情况下,以下两行表明它hakyll本身就是问题的根源:

rejecting: mtl-2.2.1, 2.2.0.1, 2.2 (conflict: hakyll => mtl>=1 && <2.2)
rejecting: mtl-2.1.1, 2.1 (conflict: base==4.6.0.1/installed..., mtl => base<4.6)
Run Code Online (Sandbox Code Playgroud)

换句话说,base与GHC版本相关联,似乎需要mtl>=2.2(或者可能少于2.1但我怀疑那也不会有效).hakyll需要mtl<2.2,所以似乎存在一个根本性的冲突,暗示这个版本的版本hakyll不适用于此版本base.

  • 我不完全确定这个答案是否值得,或者问题应该被关闭,因为它不可能帮助未来的读者或重复,但我搜索了关于cabal-install的问题,提到`-max-backjumps`并且没有找不到任何东西,所以或许有一些关于处理问题的一般指导是有用的. (3认同)