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

Cho*_*890 2 ubuntu haskell cabal cabal-install yesod

我正在尝试将yesod平台更新到最新版本.为此,我执行了以下命令:

cabal update
cabal install yesod-platform yesod-bin
Run Code Online (Sandbox Code Playgroud)

我最终得到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

经过一番研究后,我偶然发现了以下帖子,其中提到我应该在执行cabal install yesod-platform yesod-bin命令之前手动安装一些依赖项.这些依赖包括alex其中包括.遗憾的是,当我再次尝试时,我遇到了同样的错误.

我注意到在手动安装3.0.5 之后alex,我的版本/usr/bin/alex仍然是3.0.1 alex.经过一些研究,似乎在安装该软件包时,它将其安装在该$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/...)时,这是正常的吗?

编辑:尝试重命名alexalex.bakin /usr/bin/以尝试"强制"ubuntu从中获取一个$HOME/.cabal/bin,但它现在找不到任何名为的程序alex.为什么不找到它$HOME/.cabal/bin

Car*_*ten 5

事实证明,问题只是通常的路径问题. Cabal安装新的可执行文件,如alexinto

/home/[you]/.cabal/bin(或~/.cabal/bin)在linux上

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

你可以写这个临时的

export PATH=/home/[you]/.cabal/bin:$PATH在你的终端之前做任何Haskell的东西,但是你可能想要将它添加到登录脚本中.

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

if [ -d "$HOME/.cabal/bin" ] ; then
    PATH="$HOME/.cabal/bin:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)

因为这个人照顾$HOMEvar它应该工作得很好.当然这个只有在你再次进入后才能工作.

你可以测试一下

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

玩得开心.

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