Skip to content

Пакетный менеджер OPAM

OCaml Package Manager (или просто OPAM) — пакетный менеджер для OCaml, управляющий пакетами в их исходном виде (в виде исходников), является частью OCaml Platform, как и Dune.

Через него можно поставить компилятор и всё остальное.

Опыт использования OPAM

Документация

Смотрите также

  • Система сборки Dune — умеет генерировать OPAM-манифест и много что ещё

Обновление пакетов

sh
$ opam update
$ opam upgrade

Могут возникать ошибки, из-за конфликта версий, но тут остается страдать.

Установка зависимостей проекта

Если проект имеет OPAM-манифест, то вы можете установить зависимости прописанные в нём, используя следующую команду:

sh
$ opam install . --deps-only

Окружения (они же switches)

OPAM хранит компилятор и пакеты в окружениях, называемые switch. При стандартной установки у вас должно появиться глобальное default окружение.

Работа с окружениями

Для работы с окружениями используйте команды из подгруппы opam switch.

Локального окружения для проекта

Распространенная задача, если у нас некий проект и мы хотим иметь специфичный набор пакетов, определённый компилятор и т.д. В случае если у нас есть OPAM-манифест, мы можем создать локальное окружение следующей командой:

sh
$ opam switch create . --deps-only

Будьте внимательны

Данная команда создаст локальное окружение, что будет актируется по пути, в котором была выполнена команда. Создание локального окружение сопровождается инициализацией всего тулчейна и набора библиотек — это потребует время, а также вычислительные возможности.

Публикация пакета

Смотрите тут.

Pin

Команда opam pin позволяет более гибко работать с версиями пакетов: фиксировать конкретные версии, ставить локальные пакеты или upstream версии удалённых и т.д..

Пример установки upstream версии пакета с Git-репозитория

sh
$ opam pin nats-client-lwt.dev https://github.com/romanchechyotkin/nats.ocaml.git
  • dev — означает самый последний коммит

Пример установки локального проекта

sh
$ 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.