2017-01-21 60 views
3

我試圖建立Hakyll上一個新的Ubuntu 16.04的實例,但我似乎無法得到基於堆棧的安裝說明的權利。棧不解決依賴正確

開始接觸stack install hakyll,我得到:

Error: While constructing the build plan, the following exceptions were encountered: 

In the dependencies for hakyll-4.9.3.0: 
    http-conduit-2.1.11 must match >=2.2 && <2.3 (latest applicable is 2.2.3) 

Plan construction failed. 

我綁stack-install http-conduit-2.1.11時得到了類似的錯誤,這次使用:

Error: While constructing the build plan, the following exceptions were encountered: 

In the dependencies for http-conduit-2.2.3: 
    http-client-0.4.31.2 must match >=0.5 && <0.6 (latest applicable is 0.5.5) 
    http-client-tls-0.2.4.1 must match >=0.3 && <0.4 (latest applicable is 0.3.3.1) 

Plan construction failed. 

解決依賴本(也使用堆棧)後,我再次嘗試stack install http-conduit-2.1.11,但我又一次得到了相同的依賴性錯誤。

的包http-client-0.4.31.2http-client-tls-0.2.4.1出現在我的~/.stack/precompiled/x86_64-linux/ghc-8.0.1/1.24.0.0/,這是不明確的,我$PATH,但是那感覺就像一個非常哈克解決方案,我還沒有發現任何文檔推薦這種方法。

如何在我的機器上正確安裝Hakyll?

+0

我瞭解,現在棧'的宗旨安裝hakyll'是爲了得到'hakyll-init'二進制文件。該命令失敗,因爲'hakyll-4.9.3.0'與您的stack.yaml(可能是'〜/ .stack/global-project/stack.yaml')中設置的解析器不兼容。雖然'hakyll-4.9.3.0'包含在[nightly-2017-01-17](https://www.stackage.org/nightly-2017-01-17)中,所以你可以'stack - 每晚解析 - 2017-01-17安裝hakyll'。 [說明]的其餘部分(https://jaspervdj.be/hakyll/tutorials/01-installation.html)應該大體寫作。 – sjakobi

+0

順便提一下[提供'--solver'標誌](https://github.com/commercialhaskell/stack/issues/2656),這將使安裝帶有堆棧的可執行文件變得更加容易。 – sjakobi

回答

2

比@ sjakobi在這種情況下,一個簡單的辦法是開始一個新的Stack項目時指定一個解析器的命令行選項:

stack install hakyll --resolver=5.11 --install-ghc 
3

使用堆棧進行依賴管理是可重複的和聲明式的,這意味着只有在所有依賴項都記錄在項目的.cabal文件中以及項目的stack.yaml後纔會編譯堆棧項目在resolverextra-deps部分中定義了這些依賴關係的版本。

你的困惑似乎源於對stack install做什麼的誤解。命令行幫助有這樣說的:

build     Build the package(s) in this directory/configuration 
    install     Shortcut for 'build --copy-bins' 
... 
    --[no-]copy-bins   Enable/disable copying binaries to the local-bin-path 
          (see 'stack path') 

stack install保存任何依賴關係。

所以使得可以作爲一個依賴hakyll你的代碼的正確方法是:

  • stack init創建一個適當的堆棧項目,如果你已經有了一個驚天動地包,或者stack new如果你不這樣做。

  • hakyll添加到您的.cabal文件中的庫或可執行文件build-depends

  • 嘗試stack build並按照任何錯誤消息的指令,直到所有問題得到解決。

+0

雖然您可以使用'stack install'來安裝軟件包,但它並不會使已安裝的軟件包可供項目使用。 – Cubic

+0

@Cubic這取決於你的意思是「安裝軟件包」。你怎麼理解它? – sjakobi

+1

我可以'堆棧安裝',該軟件包將被下載,構建,我可以使用'stack exec'執行包中的任何二進制文件...如果有另一種解釋「安裝包「我不知道。 – Cubic