gpt4 book ai didi

haskell - 如何让 cabal 使用本地版本的包作为 Hackage 包的依赖项?

转载 作者:行者123 更新时间:2023-12-04 13:05:23 28 4
gpt4 key购买 nike

我正在尝试在 GHC 9.2.1 上安装 aeson。我第一次跑 cabal install --allow-newer --lib aeson ,在构建 attoparsec 时失败了。原来这个问题是already fixed in their Git repo ,但尚未在 Hackage 上发布。然后,我执行了以下步骤以使用修复程序构建本地版本:

git clone https://github.com/haskell/attoparsec.git
cd attoparsec
cabal install --allow-newer --lib .
cd ..
那成功了,但是当我这样做时 cabal install --allow-newer --lib aeson再次,它试图再次从 Hackage 构建 attoparsec,但再次失败。我怎样才能让 cabal 使用我刚刚构建和安装的东西?

最佳答案

主要有两种方法。
一是创建cabal project这包括 attoparsec 的克隆版本和您正在处理的本地包(可能依赖于 aeson 的包)。它可以很简单

packages: attoparsec yourpackage
事实上,你甚至不需要克隆 repo,你可以使用 source-repository-package 场代替。
因为 local packages always take precedence over external ones , 解析依赖时将选择 repo 版本。
这种方法效果很好,但有一个缺点,即如果您在许多不同的项目中使用修补过的 attoparsec,则每次都必须引用并重新编译它。

另一种方法是创建一个 local no-index package repository在你的机器上,优先于标准的 Hackage,并把 attoparsec 的 sdist tarball那里。
您需要使用 repository 声明额外的包存储库。全局 cabal 配置的字段(配置路径显示在 cabal help 的最后一行)。默认情况下,只有 Hackage:
repository hackage.haskell.org
url: http://hackage.haskell.org/
要使本地包存储库优先于 Hackage,您需要使用 active-repositories 字段,无论是在您的全局 Cabal 配置中还是在 cabal.project 中文件。
这种方法的好处是不需要创建 Cabal 项目,并且 attoparsec 的补丁版本只会编译一次(就像来自 Hackage 一样)。

关于haskell - 如何让 cabal 使用本地版本的包作为 Hackage 包的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69773999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com