"cabal install cabal-install" 不更新 OSX 中的 cabal 版本
"cabal install cabal-install" doesn't update cabal version in OSX
我是 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 发生了什么?
我看到 ~/Library/Haskell/bin
有一个更新的 cabal,所以我可以用符号 link 替换 /usr/bin/cabal 到这个副本,或者我可以将这个二进制文件复制到 /usr/bin
.
如果有更多 elegant/canonical 方法来确保默认使用新的 cabal,我仍然很感兴趣。
有两种方法可以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。
TLDR:尝试 运行 hash -r
Bash 有一个 PATH 哈希表,它将命令映射到二进制文件的位置。您可能仍然在 PATH 中的某处安装了旧版本的 cabal(可能在沙箱中)。由于 cabal 不是新命令,哈希表将继续提供旧版本。 hash -r
重建哈希表,因此 shell 将正确找到新版本(前提是它在您的路径中出现的时间早于旧版本)。
我是 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 发生了什么?
我看到 ~/Library/Haskell/bin
有一个更新的 cabal,所以我可以用符号 link 替换 /usr/bin/cabal 到这个副本,或者我可以将这个二进制文件复制到 /usr/bin
.
如果有更多 elegant/canonical 方法来确保默认使用新的 cabal,我仍然很感兴趣。
有两种方法可以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。
TLDR:尝试 运行 hash -r
Bash 有一个 PATH 哈希表,它将命令映射到二进制文件的位置。您可能仍然在 PATH 中的某处安装了旧版本的 cabal(可能在沙箱中)。由于 cabal 不是新命令,哈希表将继续提供旧版本。 hash -r
重建哈希表,因此 shell 将正确找到新版本(前提是它在您的路径中出现的时间早于旧版本)。