Ocaml OPAM обнаруживает ранее установленные пакеты Ocaml?

Я недавно установил OPAM в соответствии с инструкциями, чтобы попробовать, и это выглядит хорошо, и я хотел бы использовать его. Тем не менее, он не может обнаружить ранее установленные пакеты OCAML, которые я установил вручную, прежде чем я решу попробовать OPAM.

Первое, что OPAM хочет сделать для любой установки пакета, это установить ocamlfind. Запрос информации о пакетах, которые я установил вручную, не означает, что они уже установлены. Это включает в себя ocamlfind.

Я боюсь что-либо сделать, так как понятия не имею, какой эффект может иметь установка другого пакета. OPAM перезапишет или переустановит ocamlfind как минимум. Будет ли это мешать моему существующему ocamlfind и его знаниям всех пакетов, которые я уже установил вручную, и моей способности использовать их? Я не хочу переустанавливать все заново. Я искал и искал, но не могу найти документацию или сообщения на форуме по этой конкретной теме, и я не знаю точно, как ocamlfind работает под капотом.

По крайней мере, было бы неплохо, если бы OPAM мог обнаружить или сказать, какие пакеты уже существуют и где они находятся, чтобы избежать ненужной перекомпиляции. Может быть, это уже делает это, но я не смог обнаружить, если это так.

1 ответ

Решение

OPAM предоставляет одну (или несколько) установок OCaml независимо от установки по умолчанию, то есть компилятор или библиотеки, обычно находящиеся в /usr/bin, /usr/lib/ocaml или же /usr/local/blahblah, Следовательно, ваша система OCaml, установленная вручную, и система на основе OPAM могут сосуществовать. Вся установка OPAM выполняется под $HOME/.opam/switch/ (switch=system по умолчанию), включая двоичный исполняемый файл. Итак, для вашего случая, OCamlFind не был перезаписан OPAM. OPAM установил другой OCamlFind в другой каталог.

Используемая система может быть "переключена" переменными окружения. "opam config env" показывает переменные, которые вы должны объявить для использования текущего "переключателя". Если вы хотите использовать установку по умолчанию, убедитесь, что эти переменные не относятся к объектам OPAM.

Чтобы жить с вашими скомпилированными вручную библиотеками и пакетами OPAM, перекомпилируйте и переустановите их в коммутируемой среде OPAM. Обратите внимание, что OPAM может перезаписать ваши пакеты здесь. Например, если вы устанавливаете ocamlfind вручную в "системной" директории OPAM, то, если вы наберете "opam install ocamlfind", тогда OPAM перезаписывает вашу установку OCamlFind. (О, кстати, я думаю, что OPAM трудно предупредить нас, когда перезаписывает существующую установку, поскольку пакет OPAM не содержит информации о том, какие пакеты OCamlFind он устанавливает).

Использовать библиотеки, установленные по умолчанию, и пакеты OPAM одновременно... AFAIK, не просто. По крайней мере, я думаю, что OPAM не предназначен для такого использования. Чтобы избежать путаницы путей к библиотекам, перенесите их на один из коммутаторов OPAM.

Если в будущем у вас появятся пожелания OPAM, опубликуйте их по адресу https://github.com/OCamlPro/opam.

Другие вопросы по тегам