installation - Ocaml OPAM 是否检测先前安装的 Ocaml 软件包?

标签 installation package ocaml ocamlfind opam

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

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

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

至少,如果 OPAM 可以检测或被告知哪些包已经存在以及它们驻留在何处以避免不必要的重新编译,那将会很好。也许它已经这样做了,但我无法发现它是否确实如此。

最佳答案

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

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

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

关于installation - Ocaml OPAM 是否检测先前安装的 Ocaml 软件包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764906/

相关文章:

hadoop - 无法在端口 7180 上设置 cloudera manager web - 集群安装

laravel - 在包上使用模型

python - 原子 : Can't search for Packages or Themes in the Install Packages section of Settings

python - 在 Kivy 程序中使用各种 Python 包

mysql - 在 Mac OS X Lion 上安装 MySQL?

django - 在安装 Django-nonrel 之前是否需要卸载 Django 1.3?

PHP open_basedir 错误

parsing - 将 menhir 与 sedlex 结合使用

function - OCaml - 将递归函数的值保存在哈希表中

class - 如何使用 OCaml 中的类类型强制类中的 val 在类中不可变