由于Alex包装,Yesod平台安装失败

时间:2014-07-29 15:47:36

标签: haskell ubuntu cabal yesod cabal-install

我试图将yesod平台更新到最新版本。为此,我执行了以下命令:

cabal update
cabal install yesod-platform yesod-bin

我最终得到以下错误:

Resolving dependencies...
Configuring language-javascript-0.5.13...
cabal: The program alex version >=3.0.5 is required but the version found at /usr/bin/alex is version 3.0.1
cabal: Error: some packages failed to install:
hjsmin-0.1.4.6 depends on language-javascript-0.5.13 which failed to install
language-javascript-0.5.13 failed during the configure step. The exception was:
ExitFailure 1
yesod-platform-1.2.12.2 depends on language-javascript-0.5.13 which failed to install
yesod-static-1.2.4 depends on language-javascript-0.5.13 which failed to install

经过一番研究后,我偶然发现following post提到我应该在执行cabal install yesod-platform yesod-bin命令之前手动安装一些依赖项。这些依赖项包括alex等。不幸的是,当我再次尝试时遇到同样的错误时,这没有用。

我注意到在alex版本3.0.5手动安装后,/usr/bin/alex中的alex版本仍然是3.0.1。经过一些研究后,似乎在安装该软件包时,它会将其安装在$HOME/.cabal/bin中并且该路径不在我的$PATH变量中,因此我之前将其添加到/etc/environment文件中条目/usr/bin/。重启我的服务器后,我再次尝试过,但仍然遇到同样的错误。

即使我在$HOME/.cabal/bin之前添加/usr/bin/,它仍会在后者中查找alex,这似乎是问题所在。除了手动将alex版本3.0.5的可执行文件从$HOME/.cabal/bin复制到/usr/bin/之外(我害怕会导致一些问题,并且在想要更新时会出现问题。未来),我该怎么办?这是真正的问题吗?

另外,作为一个附带问题,当我echo $PATH时,$ HOME未解析为/home/<myusername>(我看到$HOME/...),这是正常的吗?

编辑:尝试在alex中将alex.bak重命名为/usr/bin/以尝试&#34;强制&#34; ubuntu从$HOME/.cabal/bin获取一个,但它现在找不到任何名为alex的程序。为什么在$HOME/.cabal/bin找不到它?

1 个答案:

答案 0 :(得分:5)

事实证明问题只是通常的路径问题。 Cabalalex等新的可执行文件安装到

中 Linux上的

/home/[you]/.cabal/bin(或~/.cabal/bin

所以你应该设置你的路径,先看看那里。

你可以通过写

来临时 在执行任何 Haskell 之前,终端中的

export PATH=/home/[you]/.cabal/bin:$PATH,但通常情况下,您可能希望将其添加到登录脚本中。

最好的地方是IMO /home/[you]/.profile(或~/.profile)所以编辑此文件(或者如果它不存在则创建它)并将这些行添加到文件的末尾:

if [ -d "$HOME/.cabal/bin" ] ; then
    PATH="$HOME/.cabal/bin:$PATH"
fi

由于这个人负责$HOME var,它应该可以正常工作。 当然,只有在你再次进入后才能使用。

您可以使用

进行测试

whereis alexalex --ver - 第一个应该指向这条路径,第二个应该打印出你当前版本的alex。

玩得开心。

PS:当然,在Linux中用你的名字替换[you];)