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

Haskell 由于Alex软件包,Yesod平台安装失败,haskell,ubuntu,cabal,yesod,cabal-install,Haskell,Ubuntu,Cabal,Yesod,Cabal Install,我正在尝试将YesSOD平台更新到最新版本。为此,我执行了以下命令: 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

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

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
经过一番研究,我无意中发现了一个新方法,其中提到在执行
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/
之前。重新启动服务器后,我再次尝试,但仍然出现相同的错误

即使我在
/usr/bin/
之前添加了
$HOME/.cabal/bin
,在后者中仍然会查找
alex
,这似乎是问题所在。除了手动将alex 3.0.5版的可执行文件从
$HOME/.cabal/bin
复制到
/usr/bin/
(我担心这会给我带来一些问题,并且在将来想要更新时会让我头疼),我还能做什么?这是真正的问题吗

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


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

结果表明,问题只是常见的路径问题。
Cabal
将新的可执行文件如
alex
安装到

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

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

你可以通过写信来回复这个临时通知

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
由于这个函数负责
$HOME
var,它应该可以正常工作。 当然,这个只有在你再次登录后才能使用

你可以用它来测试

alex在哪里
alex--ver
-第一个应该也指向此路径,第二个应该打印出alex的当前版本

玩得开心


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

亚历克斯说什么正常情况下,如果正确设置路径,它应该可以工作。无论如何,你可以暂时离开。更改完整路径
导出路径=/home/[you]/.cabal/bin
,然后重试。最后一句话:您可以复制alex,这应该没有问题-但可能/usr/bin中的那一个只是一个符号链接。您的路径似乎有缺陷-请尝试按照我之前所说的方式在控制台中设置它。顺便说一句:我认为与当前平台(很快就会有一个新平台)相匹配的
alex
3.1.0
(你做了
cabal更新
cabal安装alex
对吗?(刚刚看到-当前的是
3.1.3
)@CarstenKönig当我使用
export
添加路径时,确实是我的路径有缺陷,并且成功。但问题是
export
不是永久性的(它会在重新启动后恢复)。为什么$HOME没有在
/etc/environment
文件中正确注册?这不是设置
$PATH
变量以使其在重新启动后保持不变的正确方法吗?是的,当我执行
alex--ver
时,我的alex版本是3.1.3,因此它现在是最新的。您可以将同一行添加到名为
/HOME/[you]的文件中/.profile
-它将在登录时为您执行此操作-很可能此文件已经存在,您只需在没有导出的情况下追加行即可(例如,
PATH=“$HOME/.cabal/bin:$PATH”
),该行与$HOME有关-导出时可能未设置此env.var(取决于您在何处进行导出)-我通常只是在完整路径中输入,以便额外保存;)