引入quickcheck-instances测试包时Stack构建遭遇transformers版本冲突的解决方案咨询
遇到的核心问题是transformers-compat-0.6.6要求transformers版本为0.2.*,但你的stack配置中引入了transformers-0.5.6.2,两者版本不兼容。以下是几个不需要开启allow-newer的更优解决方案:
1. 替换兼容版本的transformers-compat
transformers-compat-0.6.6是较老的版本,仅支持旧版transformers。你可以替换为一个支持transformers-0.5.6.2的transformers-compat版本,比如transformers-compat-0.7.1(或更高的兼容版本):
- 从
extra-deps中移除以下两行:- transformers-compat-0.6.6@sha256:510709db2b12d1510d70de824ee544ca0a9e6f27aa7e299218cbacc0750b4a5e,5560 - transformers-0.5.6.2@sha256:6c959d14430f4deffb99579ba019de07c3d852a2122b6f449344386c7d75ff1d,3172 - 添加兼容的transformers-compat版本(你可以通过
stack transformers-compat命令获取最新兼容的哈希值,或者直接指定版本让stack自动解析):- transformers-compat-0.7.1
这样新的transformers-compat版本会和transformers-0.5.6.2兼容,同时满足quickcheck-instances的依赖要求。
2. 减少手动指定的extra-deps,让stack自动解析
你当前的extra-deps里手动添加了大量依赖,这容易引发版本冲突。如果你的stack resolver版本足够新,quickcheck-instances和QuickCheck可能已经包含在resolver的快照中,不需要手动添加:
- 先移除
extra-deps中所有和quickcheck-instances、QuickCheck及其依赖相关的条目(包括你列出的所有那些依赖)。 - 确保你的
package.yaml中的依赖范围正确:dependencies: - blackjack - quickcheck-instances >= 0.3.25 && < 0.4 - QuickCheck >= 2.14.2 && < 2.15 - 运行
stack build,stack会自动从resolver中寻找满足版本要求的包,如果有缺失,它会提示你需要添加的extra-deps条目,此时只需添加必要的部分即可,避免手动指定过多依赖导致冲突。
3. 切换到合适的stack resolver
如果当前使用的resolver版本过旧,可能无法找到兼容的依赖组合。你可以切换到一个包含quickcheck-instances >=0.3.25和QuickCheck >=2.14.2的resolver版本(比如较新的LTS版本)。修改stack.yaml中的resolver字段:
resolver: lts-18.28 # 示例版本,请根据实际情况选择合适的LTS版本
之后运行stack build,stack会自动处理所有依赖,无需手动添加大量extra-deps。
内容的提问来源于stack exchange,提问作者Xwtek

