有什么好方法可以解决 cabal 安装问题?

有什么好方法可以解决 cabal 安装问题?

我使用 cabal 软件包管理器来安装 Haskell 程序的库和我从一些存储库克隆的新项目。我经常遇到问题。大多数项目的安装看起来都非常简单,但对我来说并非总是如此 - 有时它们很难运行。事实上,有些项目太难了,以至于我因为无法安装而对项目失去了兴趣。

所以我不想抱怨,而是想问问我应该怎么做才能改善这种情况。我想用我最近遇到的问题作为例子。

我有兴趣尝试Gitit 项目。这是一个看起来很有前途的个人 wiki,可以在各种版本控制系统上运行。

这就是我所做的:

  • 克隆自Github
  • 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。前者将所有内容安装在沙盒中,不会干扰其他安装。

因此你应该先安装一个全新的Haskell 平台,然后 fork 存储库并最终使用 cabal-dev 进行构建。当然,cabal-dev install gitit如果您不想在源代码上工作,也可以安装 gitit。

您应该避免对复杂项目进行全局安装。

答案2

对于任何偶然发现这一点的人来说,我发现了两件重要的事情,可以让阴谋变得不那么痛苦。

首先,从 cabal-install 1.18 开始内置了沙盒(您不再需要 cabal-dev)。您应该使用 进行升级cabal install cabal-install,并将它们用于一切!我~/.cabal/sandboxes为每个构建创建并放置了一个沙盒。然后我将完成的二进制文件链接~/.cabal/binln

其次,如果您的发行版(例如 Debian)不授予/tmp执行权限,则会导致各种看似无关的错误。诸如此类configure: error: cannot run C compiled programs。使用 很容易修复alias cabal="TMPDIR=/somewhere/with/permission cabal"

相关内容