You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Cabal实现类似stack ls dependencies的依赖列表功能?

如何用Cabal获取与stack ls dependencies一致的依赖列表(含传递依赖)

之前用stack ls dependencies能列出项目所有依赖(包括传递依赖,比如OneTuple),切换到Cabal后试了一堆命令都得不到相同结果?问题出在你用的命令都没命中「项目构建所需的完整依赖树」这个点,下面是正确的解决方法:

为什么之前的命令不对

  • cabal list ...:这是查询Hackage索引里的包,不是当前项目的依赖,所以会返回上万条结果,还找不到你本地的OneTuple
  • cabal exec ghc-pkg list ...:只能看到当前环境已安装的包,而Cabal构建时会为项目单独管理依赖(比如dist-newstyle里的本地包数据库),很多传递依赖可能只在构建计划里,没全局安装,所以数量少很多
  • cabal install --dry-run ...:模拟安装的输出太零散,不是结构化的完整依赖列表

正确的Cabal命令

Cabal 3.6+版本提供了plan子命令,专门用来查看项目的构建计划,能完整列出所有直接+传递依赖:

  1. 先确保生成了构建计划(如果还没配置过项目):
cabal configure
  1. 查看所有依赖的扁平化列表(和stack ls dependencies输出格式接近):
cabal plan list

这个命令会输出所有构建计划里的包,包括传递依赖,数量应该和Stack列出的265个差不多,也能找到OneTuple。

  1. 如果需要更详细的信息(比如许可证),用:
cabal plan show

输出里每个包都会包含license字段,你可以用过滤命令提取,比如:

cabal plan show | grep -E 'name:|license:'
  1. 如果你只需要去重后的包名列表:
cabal plan list | awk '{print $1}' | sort | uniq

补充说明

Stack的createDependencyGraph本质是解析项目的依赖树,Cabal的plan子命令做的是同样的事——基于项目的.cabal文件和当前的包索引,生成完整的依赖解析结果,所以能得到和Stack一致的依赖范围。

内容的提问来源于stack exchange,提问作者RandomB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:02:49