我是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发生了什么?
答案 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将正确地找到新版本(假设它在路径中比旧版本更早出现)。