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

Windows 10下GHC 8.6.5中Text.Regex.Posix/TDFA无法在GHCi加载

为什么Cabal安装的包无法在GHCi中加载?

这是个很常见的问题,核心原因是Cabal v2+(包括你用的new-install、v2-install)的包管理机制和GHC默认的package查找逻辑不匹配,我来给你拆解清楚:

问题根源

Cabal从v2版本开始引入了隔离式包管理:

  • 当你执行cabal new-install或v2-install时,包会被安装到Cabal的**全局包存储(global package store)**里,这个存储是独立于GHC默认的系统package database的。
  • GHCi默认只会从自己的系统package database和当前项目的本地package database(如果有的话)查找包,根本不知道Cabal的全局存储在哪里,所以加载不了你安装的Text.Regex.Posix和Text.Regex.TDFA。
  • 至于cabal info显示未安装,大概率是你在某个项目目录下执行的命令——Cabal v2会优先读取项目本地的依赖状态,而你安装的包在全局存储里,不在项目本地的依赖列表中,所以会显示未安装。

而你在项目.cabal文件里添加build-depends后能正常构建,是因为Cabal在构建项目时,会自动从全局存储中拉取所需依赖,并把这些包的路径传递给GHC,所以GHC能找到它们。

解决方案

这里有几个实用的解决方法,按推荐程度排序:

1. 用Cabal直接启动GHCi(最推荐)

直接让Cabal帮你配置好GHCi的环境,这样就能自动加载你需要的包:

cabal repl --build-depends text-regex-posix, text-regex-tdfa

启动后的GHCi就能直接import Text.Regex.Posix或import Text.Regex.TDFA了,完全不用手动配置路径。

2. 配置GHC环境变量,让它识别Cabal的全局存储

如果你想让普通的ghci命令也能找到这些包,需要把Cabal的全局package database路径添加到GHC_PACKAGE_PATH环境变量中:

  • 首先找到Cabal的全局db路径:在Windows 10上,路径大概是%APPDATA%\cabal\store\ghc-8.6.5\package.db(你可以用cabal v2-exec -- ghc-pkg list命令确认具体路径)。
  • 打开命令提示符,执行以下命令(替换成你实际的路径):
    setx GHC_PACKAGE_PATH "%APPDATA%\cabal\store\ghc-8.6.5\package.db;%GHC_PACKAGE_PATH%"
    
  • 重启你的终端,之后再启动ghci就能加载这些包了。

3. 不推荐:用ghc-pkg手动注册包

你可以把Cabal安装的包注册到GHC的全局package database里,但这种方法容易导致版本冲突,破坏Cabal的隔离机制,只在万不得已时使用:

ghc-pkg register --global "路径到包的*.conf文件"

(你需要在Cabal的存储目录里找到对应包的.conf文件,路径通常是%APPDATA%\cabal\store\ghc-8.6.5\text-regex-posix-xxx\package.conf.install)

关于v1-install无效的补充

你尝试的v1-install(旧版全局安装)无效,大概率是因为v1安装的包默认存放在%APPDATA%\cabal\packages\ghc-8.6.5下的package database里,同样没有被添加到GHC_PACKAGE_PATH中,所以GHCi还是找不到。用上面的方法2把这个路径也加到环境变量里就能解决,但还是更推荐用方法1或方法2的v2版本方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 10:17:38