Зависимость пакета установки стека Haskell от github
можно ли установить версию пакета из github с помощью стека Haskell?
например .cabal
или stack.yaml
файл, как я могу указать зависимость в Git repo/branch / revision?
3 ответов
на документация stack.yaml
packages
раздел приводит примеры ссылок на более сложные местоположения пакетов.
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
запись просто сказать stack
не рассматривать код, который он вытаскивает, как то, что вы разрабатываете (например, не загружайте его в GHCi).
новый синтаксис для стека >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
убедитесь, что пакеты (которые не в Stackage) доступны бы какой-нибудь .cabal
файл в вашем проекте хочет их, на всякий случай.
вы все равно должны указать имя пакета в build-depends
в своем .cabal
файл, чтобы сказать, что вы на самом деле зависит от пакета.
внимание, неважно какая ветвь фиксации, и РЕПО может быть вилки. Когда пакет находится в подкаталоге, вы можете указать его, иначе он будет по умолчанию верхнего уровня.
синтаксис для стека >1.6.0
extra-deps:
- github: git@github.com:apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
[Edit] я обнаружил, что иногда синтаксис из 1.7.1 терпит неудачу с сообщением об ошибке
C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\distd103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory
и я решил это, используя синтаксис 1.6.0, хотя я использовал стек 1.7.1. При использовании Travis это не удастся, потому что Трэвис не может клонировать через SSH без ваших SSH-ключей, конечно. Но вы все равно можете использовать https-ссылку как
extra-deps:
- github: https://github.com/apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
в моем случае я хотел зависеть от вилки pandoc, указав точную фиксацию. Это сработало, добавив следующее в stack.yml
:
extra-deps:
- archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip
это будет работать с любым ветке-как URL на Git. Я нашел свой url, просмотрев файлы в фиксации и скопировав URL-адрес с кнопки "Загрузить ZIP".
обратите внимание, что моя ветвь имеет определенную версию, выше, чем любой стек версий может получить от распознавателя. Я указываю версию в каббалистические зависимости. Если версия на этой ветви будет перекрываться с одной доступной в индексе распознавателя, я не уверен, какой из них будет выбран