6

我最近按照说明安装了 OPAM 来试一试,它看起来不错,我想使用它。但是,在我选择尝试 OPAM 之前,它无法检测到我手动安装的以前安装的 OCAML 包。

OPAM 现在想要为任何软件包安装做的第一件事就是安装 ocamlfind。查询有关我手动安装的软件包的信息并不反映它们已经安装。这包括 ocamlfind。

我害怕做任何事情,因为我不知道安装另一个软件包可能会产生什么影响。OPAM 至少会覆盖或重新安装 ocamlfind。这会破坏我现有的 ocamlfind 及其对我已经手动安装的所有软件包的了解以及我使用它们的能力吗?我不想重新安装所有东西。我进行了搜索和搜索,但找不到有关此确切主题的任何文档或论坛帖子,而且我不确切知道 ocamlfind 是如何工作的。

至少,如果 OPAM 可以检测或被告知哪些包已经存在以及它们所在的位置以避免不必要的重新编译,那就太好了。也许它已经这样做了,但我无法发现它是否这样做。

4

1 回答 1

6

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 可能会在此处覆盖您的包。例如,如果您在“system”OPAM 目录中手动安装 ocamlfind,那么如果您键入“opam install ocamlfind”,那么 OPAM 会覆盖您的 OCamlFind 安装。(哦,顺便说一句,我认为 OPAM 在覆盖现有安装时很难警告我们,因为 OPAM 包没有关于它安装了哪些 OCamlFind 包的信息)。

同时使用安装在默认位置的库和 OPAM 包是...... AFAIK,不容易。我认为至少 OPAM 不是为这种用途而设计的。为避免库路径混淆,请将它们移植到 OPAM 交换机之一。

如果您将来获得 OPAM 的一些功能愿望,请将它们发布在https://github.com/OCamlPro/opam

于 2013-05-27T02:23:08.897 回答