解決 cabal 安裝問題的好方法是什麼?

解決 cabal 安裝問題的好方法是什麼?

我使用 Haskell 程式的 cabal 套件管理器來安裝我從一些儲存庫克隆的庫和新專案。我經常遇到問題。大多數項目都使安裝它們看起來非常容易,但就我而言,情況並非總是如此 - 有時它們很難運行。事實上,有些太難了,以至於我僅僅因為無法安裝它就對這個專案失去了興趣。

因此,我不想抱怨,而是想問我應該做些什麼來改善這種情況。我想用我最近遇到的問題作為例子。

我有興趣嘗試一下gitit項目。這是一個看起來很有前途的個人維基,可以在各種版本控制系統上運作。

這就是我所做的:

  • 克隆自吉圖布
  • cabal install在專案目錄中運行,就像我在專案安裝頁面上被告知的那樣:

    mika@eka:~/git/gitit$ ls
    BLUETRIP-LICENSE  CHANGES  HCAR-gitit.tex  LICENSE  Network  README.markdown  RELANN-0.6.1  Setup.lhs  TANGOICONS  YUI-LICENSE  data  expireGititCache.hs  gitit.cabal  gitit.hs  plugins
    mika@eka:~/git/gitit$ cabal install
    Resolving dependencies...
    cabal: cannot configure happstack-server-7.0.7. It requires base64-bytestring
    ==1.0.*
    For the dependency on base64-bytestring ==1.0.* there are these packages:
    base64-bytestring-1.0.0.0. However none of them are available.
    base64-bytestring-1.0.0.0 was excluded because gitit-0.10 requires
    base64-bytestring ==0.1.*
    mika@eka:~/git/gitit$ 
    
  • 所以現在我在想:好吧,我會自己安裝 happstack-server,也許這會起作用:

    mika@eka:~/git/gitit$ cabal install happstack-server
    Resolving dependencies...
    Warning: happstack-server.cabal: Ignoring unknown section type: test-suite
    Configuring happstack-server-7.0.7...
    cabal: At least the following dependencies are missing:
    blaze-html ==0.5.*,
    hslogger >=1.0.2,
    monad-control ==0.3.*,
    network >=2.2.3,
    sendfile >=0.7.1 && <0.8,
    system-filepath >=0.3.1,
    text >=0.10 && <0.12,
    threads >=0.5,
    transformers-base ==0.4.*
    cabal: Error: some packages failed to install:
    happstack-server-7.0.7 failed during the configure step. The exception was:
    ExitFailure 1
    
  • 所以看起來缺少一些依賴項。但是安裝這些依賴項不就是使用 cabal 的首要目的嗎?

我該怎麼辦?提交錯誤報告(到哪個項目?)、手動安裝依賴項還是其他?解釋導致此類問題的原因會加分。

答案1

具有複雜依賴關係的專案(以及那些最有可能適合此類的包含 Web 伺服器的專案)通常最好使用陰謀集團開發而不是陰謀集團。前者將所有內容安裝在沙箱中,並且不會幹擾其他安裝。

所以你應該先安裝一個新的哈斯克爾平台,然後分叉儲存庫並最終使用 cabal-dev 進行建置。當然,cabal-dev install gitit如果您不想使用原始程式碼,您可以安裝 gitit。

您應該避免複雜項目的全域安裝。

答案2

對於任何偶然發現這一點的人來說,我發現了兩件重要的事情,可以讓陰謀集團不再那麼痛苦。

首先,從 cabal-install 1.18 開始內建沙箱(您不再需要 cabal-dev)。您應該使用 進行升級cabal install cabal-install,並將它們用於所有用途!我~/.cabal/sandboxes為每個構建創建並放置一個沙箱。然後我將完成的二進位檔案連結到~/.cabal/binwith中ln

其次,如果您的發行版(例如 Debian)不提供/tmp執行權限,則會導致各種看似不相關的錯誤。像configure: error: cannot run C compiled programs。使用 很容易修復alias cabal="TMPDIR=/somewhere/with/permission cabal"

相關內容