" cabal安装cabal-install"不会更新OSX中的cabal版本

时间:2015-01-07 18:58:30

标签: haskell cabal

我是haskell和cabal的新手,所以我可能会错过一些简单的事情。

我更新了cabal-install:

sudo cabal install cabal-install
Password:
Resolving dependencies...
Configuring cabal-install-1.22.0.0...
Building cabal-install-1.22.0.0...
Installed cabal-install-1.22.0.0
Updating documentation index

然而cabal --version说:

cabal-install version 1.18.0.5
using version 1.18.1.4 of the Cabal library 

cabal-install 1.22.0.0发生了什么?

3 个答案:

答案 0 :(得分:12)

有两种方法可以全局制作cabal个安装包。请注意,因此cabal可能需要sudo。

此命令将全局安装<PACKAGE>

$ cabal install <PACKAGE> --global

作为更通用的解决方案,请修改文件~/.cabal/config并将user-install设置为False。这将自动设置--global标志,这样您就可以毫不费力地编写cabal install <PACKAGE>。这是我的config文件的片段:

...
-- split-objs: False
-- executable-stripping: True
user-install: False
-- package-db:
-- flags:
...

您可能还想将root-cmd设置为sudo(如果尚未设置),以便cabal在遇到权限问题时自动提示输入root密码。

网上有更多信息here

答案 1 :(得分:5)

我看到~/Library/Haskell/bin处有更新的cabal,所以我可以用这个副本的符号链接替换/ usr / bin / cabal,或者我可以将此二进制文件复制到/usr/bin

我仍然感兴趣的是,如果有更优雅/规范的方式来确保默认使用新的cabal。

答案 2 :(得分:2)

TLDR:尝试运行hash -r

Bash有一个PATH哈希表,可以将命令映射到二进制文件的位置。您可能仍然在PATH中的某个位置安装了旧版本的cabal(可能在沙盒中)。由于cabal不是新命令,因此哈希表将继续提供旧版本。 hash -r重建哈希表,因此shell将正确地找到新版本(假设它在路径中比旧版本更早出现)。