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

CI环境下使用cabal freeze仍无法解析依赖问题求助

依赖解析错误排查与解决

问题根源

你的错误核心在于:本地生成的 cabal.project.freeze 文件强制要求 base ==4.16.4.0(该版本对应GHC 9.2.6),但CI环境中安装的GHC版本自带的base库版本与该要求不匹配。由于base是GHC的核心绑定库,无法通过cabal单独升级或降级,直接导致依赖解析失败。

从错误日志关键信息可验证这一点:

[__1] rejecting: base-4.16.4.0 (constraint from non-upgradeable package requires installed instance)

这说明CI环境的GHC并未预装base-4.16.4.0,而base作为GHC的内置组件,无法通过常规依赖安装流程补充。

可行解决方案

1. 统一CI与本地的GHC版本

确保CI环境使用和本地完全一致的GHC 9.2.6及cabal 3.6.3版本。在GitHub Actions工作流文件中,通过官方动作指定版本:

- name: Setup Haskell环境
  uses: haskell/actions/setup@v2
  with:
    ghc-version: '9.2.6'
    cabal-version: '3.6.3'

此方案能让cabal.project.freeze中的所有依赖约束直接生效,完全对齐本地构建环境。

2. 在CI中重新生成冻结文件

若无法固定CI的GHC版本,可在CI流程中删除本地提交的cabal.project.freeze,让cabal适配当前CI环境重新解析依赖并生成冻结文件:

rm cabal.project.freeze
cabal build --freeze
cabal build

这种方式能避免版本不兼容问题,但可能导致本地与CI的依赖版本存在细微差异。

3. 放宽cabal文件的base约束(不推荐)

若必须保留冻结文件,可尝试放宽cabal主文件中base的版本范围,但需重新验证所有依赖的兼容性:
将原约束:

base >=4.13

调整为:

base >=4.13 && <4.17

修改后需重新生成冻结文件并完成本地测试,确保无新的依赖冲突。

额外建议

  • 检查CI工作流中GHC安装步骤的版本配置,确认与本地环境一致。
  • 避免直接提交本地生成的cabal.project.freeze到仓库,优先在CI环境动态生成,或使用cabal.project定义更灵活的依赖规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:05:42