我试图将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
找不到它?
答案 0 :(得分:5)
事实证明问题只是通常的路径问题。
Cabal
将alex
等新的可执行文件安装到
/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 alex
和alex --ver
- 第一个应该指向这条路径,第二个应该打印出你当前版本的alex。
玩得开心。
PS:当然,在Linux中用你的名字替换[you]
;)