我最近按照说明安装了OPAM试试它看起来不错,我想用它。但是,在我选择尝试OPAM之前,它无法检测到我手动安装的以前安装的OCAML包。
现在OPAM想要为任何软件包安装做的第一件事就是安装ocamlfind。查询有关我手动安装的软件包的信息并不反映它们已经安装。这包括ocamlfind。
我害怕做任何事情,因为我不知道它可能会对安装另一个包有什么影响。 OPAM至少会覆盖或重新安装ocamlfind。这会破坏我现有的ocamlfind以及我已经手动安装的所有软件包的知识以及我使用它们的能力吗?我不想再重新安装所有东西。我搜索过并搜索过但找不到关于这个精确主题的任何文档或论坛帖子,我也不确切知道ocamlfind是如何工作的。
至少,如果OPAM可以检测或被告知哪些包已经存在以及它们驻留在哪里以避免不必要的重新编译,那将是很好的。也许它已经做到了,但我无法发现它是否存在。
答案 0 :(得分: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。