Haskell Stack从github安装包依赖

时间:2016-07-14 14:55:30

标签: haskell github dependency-management cabal haskell-stack

是否可以使用Haskell堆栈从github安装软件包的版本?

e.g。在.cabalstack.yaml文件中,如何将依赖项指向git repo / branch / revision?

3 个答案:

答案 0 :(得分:23)

documentation for the stack.yaml packages section给出了引用更复杂的包位置的示例。

true

然后将packages: - location: . - location: dir1/dir2 - location: https://example.com/foo/bar/baz-0.0.2.tar.gz - location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip - location: git: git@github.com:commercialhaskell/stack.git commit: 6a86ee32e5b869a877151f74064572225e1a0398 - location: hg: https://example.com/hg/repo commit: da39a3ee5e6b4b0d3255bfef95601890afd80709 添加到extra-dep: true条目,只是为了告诉package不要将它所引入的代码视为您正在开发的内容(例如,不要将其加载到GHCI)。

答案 1 :(得分:6)

堆栈> 1.7.1的新语法

正如@Flip所评论的,docs.haskellstack.org处的文档 阐明stack.yaml的新语法是:

extra-deps:
- github: apolishch/prime_table
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
  commit: "74bac0f"
  subdirs: reactive-banana

要清楚:stack.yaml中的依赖项确保项目中的某些.cabal文件需要它们(如果不是Stackage)可用,以防万一。

您仍然必须在build-depends文件的.cabal中指定软件包的名称,以说您实际上依赖于软件包。

请注意,提交位于哪个分支上都没有关系,存储库可以是fork。当包位于子目录中时,可以指定它,否则它将默认为顶级。

堆栈的语法> 1.6.0

extra-deps:
- github: git@github.com:apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

[编辑]我发现有时1.7.1中的语法会失败并显示错误消息

C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\dist\7d103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory

,即使我使用的是Stack 1.7.1,我也使用1.6.0语法解决了该问题。 使用Travis时,这将失败,因为Travis当然不能在没有您的SSH密钥的情况下通过SSH进行克隆。但是您仍然可以将https链接用作

extra-deps:
- github: https://github.com/apolishch/prime_table.git
  commit: a510622a824af999a809191e8c959b8ea5fa8bdb

答案 2 :(得分:1)

在我的情况下,我想依赖于一个pandoc的分支,指定一个精确的提交。它的工作原理是将以下内容添加到stack.yml

extra-deps: - archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip

这适用于Git上任何类似分支的 URL。我通过在提交时浏览文件并从“下载ZIP”按钮复制URL找到了我的URL。

请注意,我的分支具有特定版本,高于Stack可从解析器获取的任何版本。我精确定位了Cabal依赖项中的版本。如果该分支上的版本与解析器索引中的版本重叠,我不确定将选择哪一个