Cabal反复更新失败求助:89天未更新,无法下载Hackage包索引
问题分析与解决方案
从你提供的环境信息和报错日志来看,Cabal更新失败主要有几个核心原因:
- 旧版本Cabal的兼容性缺陷:你使用的Cabal 2.0.0.1是2018年左右的旧版本,而当前Hackage官方源已全面切换到HTTPS协议,旧版本Cabal对现代TLS加密支持不足,无法正确解析新的源响应。
- 默认镜像源访问故障:配置中默认的
objects-us-west-1.dream.io镜像可能存在网络链路问题,或者该镜像服务已不再维护。 - Windows系统网络配置限制:比如系统默认禁用了现代TLS版本、防火墙/代理拦截了Cabal的网络请求,或是系统WebClient组件权限不足。
下面是按优先级排序的解决方案,建议依次尝试:
方案1:更换Hackage官方源
这是最快速的尝试方向,步骤如下:
- 找到Cabal配置文件:Windows系统中路径为
C:\Users\<你的用户名>\AppData\Roaming\cabal\config(替换<你的用户名>为实际账号名)。 - 打开文件后,找到
remote-repo开头的行,替换为官方HTTPS源:remote-repo: hackage.haskell.org:https://hackage.haskell.org/ - 保存配置,重新运行
cabal update命令。
方案2:手动升级Cabal版本
旧版本Cabal自身无法完成更新,需要手动替换:
- 下载兼容GHC 8.2.2的Cabal二进制包:推荐选择Cabal 2.4.x系列(与GHC 8.2.2兼容性最佳),找到Windows平台的
cabal-install-xxx-x86_64-windows.zip压缩包。 - 解压得到
cabal.exe文件,找到你当前GHC的安装目录(比如C:\Program Files\Haskell Platform\8.2.2\bin),替换该目录下的旧版cabal.exe。 - 打开新的PowerShell窗口,运行
cabal --version确认版本更新成功,再执行cabal update。
方案3:调整系统TLS配置
旧版本Cabal依赖系统TLS组件,若系统默认禁用现代TLS协议会导致HTTPS连接失败:
- 打开控制面板 → 网络和Internet → Internet选项 → 高级标签。
- 在“安全”区域,勾选
TLS 1.2和TLS 1.3,取消勾选SSL 3.0、TLS 1.0、TLS 1.1。 - 点击“应用”并重启电脑,之后重试
cabal update。
方案4:排查网络权限问题
- 临时关闭Windows Defender防火墙或第三方杀毒软件,确认是否是安全软件拦截了Cabal的网络请求。
- 若使用代理服务器,需在Cabal配置文件中添加代理设置:找到
proxy相关项,填写代理地址和端口,比如:proxy: http://你的代理地址:端口/
内容的提问来源于stack exchange,提问作者Alberto Capitani
相关产品推荐
相关产品推荐

