什么是解决 cabal 安装问题的好方法?

sp3*_*tum 6 haskell cabal

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

因此,与其抱怨,不如问我应该做些什么来改善这种情况。我想以我最近的问题为例。

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

所以这就是我所做的:

  • 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$ 
    
    Run Code Online (Sandbox Code Playgroud)
  • 所以现在我在想:好吧,我会自己安装 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 所以看起来缺少一些依赖项。但是,安装这些依赖项难道不是首先使用 cabal 的全部意义吗?

我该怎么办?提交错误报告(到哪个项目?),手动安装依赖项还是其他什么?解释导致此类问题的原因的奖励积分。

Jef*_*eff 7

对于任何偶然发现这一点的人,我发现了两件重要的事情,可以让阴谋集团的痛苦减少。

首先,从 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"


小智 5

具有复杂依赖关系的项目——以及那些包含 Web 服务器的项目很可能适合此类——通常最好使用cabal-dev而不是 cabal构建。前者将所有内容安装在沙箱中,并且不会干扰其他安装。

所以你应该首先安装一个新的Haskell Platform,然后 fork 存储库,最后使用 cabal-dev 构建。当然,cabal-dev install gitit如果你不想在源代码上工作,你可以安装 gitit 。

您应该避免复杂项目的全局安装。