微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何指示 cabal-install 或 stack 使用本地版本的 hackage 软件包?

如何解决如何指示 cabal-install 或 stack 使用本地版本的 hackage 软件包?

假设我想修改一些相互依赖并运行的 hackage 包

stack unpack foo-1.2.0

stack unpack bar-1.0.0

其中 bar 取决于 foo

现在,要使用修改后的 bar 构建修改后的 foo,我在 bar.cabal 中指定:

build-depends:

  foo == 1.2.0

添加到我的bar的{​​{1}}:

stack.yaml

这有效,并且构建良好,但似乎如果 packages: - . - rel/path/to/foo-1.2.0/ 的依赖项,例如 bar,本身依赖于 some-package,它将认为 hackage 版本,而不是使用我的尽管我的修改版本满足版本限制,但修改后的版本。有没有办法在构建过程中强制链上的其他依赖项使用我的本地版本的包?我很欣赏这是一个非常不寻常的用例。

奇怪的是,我能够构建得很好,但尝试加载到 foo 中失败:

stack ghci

解决方法

根据Cabal User Guide,当开发一个带有多个projectlocal packages时:

本地包,以及依赖的外部包[...] 在它们之上,是就地构建的,这意味着它们始终是构建的 专用于项目,未全局安装。

因此似乎即使是外部包(即来自 Hackage 或其他包存储库的包)也会使用本地包,代价是需要为当前项目重新构建。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。