Пакетный менеджер OPAM
OCaml Package Manager (или просто OPAM) — пакетный менеджер для OCaml, управляющий пакетами в их исходном виде (в виде исходников), является частью OCaml Platform, как и Dune.
Через него можно поставить компилятор и всё остальное.
Опыт использования OPAM
Документация
- Управление зависимостями
- Using opam — всё что нужно знать, чтобы использовать
- Полный мануал с описанием всех возможностей
Смотрите также
- Система сборки Dune — умеет генерировать OPAM-манифест и много что ещё
Обновление пакетов
$ opam update
$ opam upgrade
Могут возникать ошибки, из-за конфликта версий, но тут остается страдать.
Установка зависимостей проекта
Если проект имеет OPAM-манифест, то вы можете установить зависимости прописанные в нём, используя следующую команду:
$ opam install . --deps-only
Окружения (они же switches)
OPAM хранит компилятор и пакеты в окружениях, называемые switch
. При стандартной установки у вас должно появиться глобальное default
окружение.
Работа с окружениями
Для работы с окружениями используйте команды из подгруппы opam switch
.
Локального окружения для проекта
Распространенная задача, если у нас некий проект и мы хотим иметь специфичный набор пакетов, определённый компилятор и т.д. В случае если у нас есть OPAM-манифест, мы можем создать локальное окружение следующей командой:
$ opam switch create . --deps-only
Будьте внимательны
Данная команда создаст локальное окружение, что будет актируется по пути, в котором была выполнена команда. Создание локального окружение сопровождается инициализацией всего тулчейна и набора библиотек — это потребует время, а также вычислительные возможности.
Публикация пакета
Смотрите тут.
Pin
Команда opam pin
позволяет более гибко работать с версиями пакетов: фиксировать конкретные версии, ставить локальные пакеты или upstream версии удалённых и т.д..
Пример установки upstream версии пакета с Git-репозитория
$ opam pin nats-client-lwt.dev https://github.com/romanchechyotkin/nats.ocaml.git
dev
— означает самый последний коммит
Пример установки локального проекта
$ opam pin ~/projects/my-logger
Зависимости
pin-depends
Если вы хотите запинить зависимость в вашем пакете, то вы должно прописать поле pin-depends
в ваш .opam
манифест (для Dune смотрите .opam.template
).
Пример добавления библиотеки vkashka с Git репозитория:
pin-depends: [
[ "vkashka.dev" "git+https://github.com/dx3mod/vkashka.git" ]
]
Оф. документация: https://opam.ocaml.org/doc/Manual.html#opamfield-pin-depends.