【问题标题】:How to install/use a local version of package using Stack?如何使用 Stack 安装/使用本地版本的包?
【发布时间】:2015-12-27 05:54:40
【问题描述】:

情况是,我正在尝试使用 Stack 安装 Netwire。不过最新的netwire 5.0.1 有一个问题,dhobbs 报道:http://hub.darcs.net/ertes/netwire/issue/13

由于我不知道问题何时会得到解决,所以我下载了 repo 并自己进行了更改。但是,我不明白如何安装这样的本地补丁版本。 stack install 不会将其安装到 ~/.stack 中。有人有想法吗?

更新

现在我正在使用 Stack 开发其他一些库。如何让另一个项目使用该库?硬编码相对路径看起来非常难看。

【问题讨论】:

    标签: haskell package cabal haskell-stack


    【解决方案1】:

    因此,您有一个项目要使用本地修补的 Netwire 版本,并且在您的项目中,您有一个 stack.yml,例如:

    flags: {}
    packages:
    - '.'
    extra-deps: {}
    resolver: lts-3.7
    

    您还依赖于您的 cabal 文件中声明的 netwire

    要在您的这个项目中使用已修补的 Netwire,您只需将已修补的 Netwire 包放在项目的子目录中,可能称为 netwire,然后更新您的 stack.yml

    flags: {}
    packages:
    - '.'
    - netwire
    extra-deps: {}
    resolver: lts-3.7
    

    现在stack build 将使用修补过的 Netwire 版本构建您的项目。

    您也可以将修改后的源放到网上(如果许可证允许)并使用 tarball URL 引用

    - https://example.com/netwire.tar.gz
    

    或 git 存储库和提交参考:

    - location:
        git: git@example.com/netwire
        commit: 6a86ee32e5b869a877151f74064572225e1a0398
    

    (查看文档了解更多信息:https://docs.haskellstack.org/en/stable/yaml_configuration/#packages-and-extra-deps

    【讨论】:

    • 我知道这种方法。但是,我想把 netwire 库放在一个更方便的地方,与源隔离。照你说的做让我感觉像是在 /usr 下编译了一堆软件并将源代码保留在那里。
    • 或者说,如果我在任何地方使用stack ghci,我会喜欢它,我可以导入Control.Wire
    • 那是否意味着我必须保留源代码?我认为最好只使用图书馆
    • 您可以将 git 位置指定为包。请参阅 stack.yaml 上的文档。这样您就不需要将源代码放在项目目录中。抱歉没有链接,我在手机上。
    • 您可以绕过需要将 netwire 作为带有符号链接的子目录。只需将其放在您想要的任何位置,然后将其符号链接放入您的包中即可。这是一种 hack,但它可以完成工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多