Haskell cabal-install错误

24

我在使用 cabal-install 时遇到了许多问题:
1:每次我执行 cabal update 命令时,它都告诉我要执行 cabal install cabal-install 命令,所以我就执行了,然后再次运行 cabal update 命令,它又会提示同样的信息。

2:当我尝试从 hackage 安装 ghc-mod 时,它给我返回了以下错误:

[username@arch ~]$ cabal install ghc-mod
In order, the following will be installed:
haskell-src-exts-1.14.0 (reinstall) changes: pretty-1.1.1.1 -> 1.1.1.0
hlint-1.8.55 (reinstall)
ghc-mod-3.1.4
setup: The program happy version >=1.17 is required but it could not be found.
ghc-mod-3.1.4 depends on haskell-src-exts-1.14.0 which failed to install.
haskell-src-exts-1.14.0 failed during the configure step.
hlint-1.8.55 depends on haskell-src-exts-1.14.0 which failed to install.
所以问题是The program happy version >=1.17 is required but it could not be found.,因此我使用cabal install happy安装了happy 1.19.2,没有出现问题。
我再次尝试了cabal install ghc-mod,但仍然报错,所以我尝试了cabal install haskell-src-exts --reinstall --force-reinstalls。它给了我以下错误:
[username@arch ~]$ cabal install haskell-src-exts --reinstall --force-reinstalls
Configuring haskell-src-exts-1.14.0...
setup: The program happy version >=1.17 is required but it could not be found.
Failed to install haskell-src-exts-1.14.0
cabal: Error: some packages failed to install:
haskell-src-exts-1.14.0 failed during the configure step. The exception was:
ExitFailure 1

基本上需要 happy版本 >=1.17,但找不到它。所以问题又出现在happy上了吗?

我还尝试从hackage下载tar.gz文件并对.cabal文件使用cabal install,也修改了.cabal文件以忽略依赖项,但仍然失败。

2个回答

31

cabal install 将可执行文件安装在 ~/.cabal/bin 中。

如果您将其添加到路径中,您就可以使用 cabal 安装的新可执行文件:

$ PATH=$HOME/.cabal/bin:$PATH

1
太神奇了。我遇到了两件非常奇怪的事情,所以我在这里写下来,以防对某人有所帮助。第一:我已经将$HOME/.cabal/bin添加到了我的$PATH中,但是它不起作用!只有在我用~替换$HOME后才开始工作——真的很有趣,因为我使用变量是担心波浪号不起作用。第二件事:即使系统看到了路径,并且很“高兴”,但cabal仍然没有工作!只有在我执行了这个答案中的命令之后,它才开始工作。我猜想cabal也不理解波浪号... - Hi-Angel
1
所以,我猜问题是这样的:cabal需要完整路径。因此,在我将:$HOME/.cabal/bin(带有波浪号的变体)添加到$PATH中的/etc/environment后,两种情况下的cabal都认为tilde或*$HOME*是路径的一部分(它也是有效的路径)。要使其正常工作,必须在/etc/environment中编写到具有二进制文件的目录的完整路径。 - Hi-Angel

23

我也遇到了同样的问题,通过安装happy包(一个容易混淆的包名)解决了该问题。因此,在使用cabal安装软件包之前,请先使用您的软件包管理器(如apt-get、pacman等)安装它。这应该可以解决问题。


1
在从 GHC/cabal 源代码进行干净安装(没有 Haskell 平台)时,安装此程序修复了一个不明确的 ExitFailure 1 错误。 - Elliot Cameron
3
我可以通过 cabal install happy 来解决这个问题。 - connorbode
在Ubuntu上,使用软件包管理器安装过程中曾经让我遇到了麻烦。最大的问题是apt-get安装了一种Haskell模块,但是当你开始使用cabal时,你会得到不同版本的模块。这就导致了依赖冲突的地狱。所以@connorbode的建议是最好的。使用cabal可以获得最新的、同步的版本。 - Rick Majpruz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接