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/...
)时,这是正常的吗?
编辑:尝试重命名alex
为alex.bak
in /usr/bin/
以尝试"强制"ubuntu从中获取一个$HOME/.cabal/bin
,但它现在找不到任何名为的程序alex
.为什么不找到它$HOME/.cabal/bin
?
事实证明,问题只是通常的路径问题.
Cabal
安装新的可执行文件,如alex
into
/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)
因为这个人照顾$HOME
var它应该工作得很好.当然这个只有在你再次进入后才能工作.
你可以测试一下
whereis alex
并且alex --ver
- 第一个应该指向你这条路径,第二个应该打印出你当前版本的alex.
玩得开心.
PS:[you]
当然在Linux中替换你的名字;)