如何全局安装Haskell库?Stack作为全局包管理器的疑问解答
全局安装Haskell库的推荐方式
没错,Stack确实是为项目本地构建沙箱设计的,用它全局装包后更新麻烦是个挺常见的痛点。我整理了几种推荐的全局安装Haskell库/工具的方式,你可以根据自己的情况选择:
1. 官方推荐:使用Cabal进行全局安装
Cabal是Haskell的官方包管理器,天生支持全局安装场景:
- 先确保你的Cabal是最新版本:
cabal update && cabal install cabal-install - 全局安装目标包(比如hindent):
cabal install --global hindent - 更新的时候直接重新运行上述安装命令即可,Cabal会自动检测并拉取最新版本
- 注意:全局安装的可执行文件默认放在
~/.cabal/bin目录,一定要把这个路径添加到你的系统PATH环境变量里,这样才能在终端直接调用
2. Stack折中方案:使用--copy-bins参数
如果你习惯用Stack但又需要全局可执行文件,可以用这个参数规避沙箱限制:
- 安装命令:
stack install --copy-bins hindent - 这个命令会把构建好的可执行文件复制到Stack的全局bin目录(默认是
~/.local/bin),同样要确保这个目录在PATH中 - 更新时重新运行相同命令,Stack会检查最新版本并重新构建安装
3. 隔离性最强:使用Nix包管理器
如果你追求完全的环境隔离,不想让全局包影响项目依赖,Nix是个很好的选择:
- 全局安装命令:
nix-env -iA nixpkgs.hindent - 更新时先同步Nix包仓库,再重新安装:
nix-channel --update nix-env -iA nixpkgs.hindent - 优点是每个包的依赖都是独立的,不会出现版本冲突,但Nix有一定的学习成本,适合对环境管理有较高要求的用户
额外注意事项
- 尽量不要混合使用多个包管理器进行全局安装(比如同时用Cabal和Stack全局装包),很容易出现版本冲突或环境混乱
- 像hindent这类编辑器辅助工具,全局安装是合理的选择;但如果是项目依赖的库,更推荐用Stack或Cabal的项目本地管理方式
- 如果担心全局环境污染,也可以用direnv配合Stack/Cabal为不同项目配置局部环境,但这更适合项目级依赖而非全局工具
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

