opam 切换简介
OCaml 的包管理器 opam 引入了“切换”的概念,它是一个隔离的 OCaml 环境。这些切换经常让 OCaml 新手感到困惑,因此本文旨在帮助您更好地理解 opam 切换及其在管理依赖项和项目特定配置中的使用方式。
Opam 旨在管理多个并发的安装前缀,称为“切换”。类似于 Python 的 virtualenv
,opam 切换是一个创建隔离环境的工具。它们彼此独立,并拥有自己的已安装包、仓库和配置选项。切换还拥有自己的 OCaml 编译器、库和二进制文件。这使您可以同时拥有多个编译器版本。
列出切换
以下命令将显示您系统上配置的 opam 切换。完成 OCaml 的安装后(如 安装 OCaml 中所述),将创建一个名为 default
的单个切换。此时,列出切换只会显示该切换。
$ opam switch list
# switch compiler description
-> default ocaml.4.13.1 default
创建新的切换
要创建新的 opam 切换,您可以使用 opam switch
命令,后跟所需切换名称和可选的 OCaml 编译器版本。例如,要创建一个名为“my_project”的切换,并使用特定的 OCaml 编译器版本,请使用
opam switch create my_project <compiler-version>
用您要使用的 OCaml 编译器版本替换 <compiler-version>
。如果您没有指定编译器版本,opam 将选择默认版本。
接下来,**激活**您的新切换。这将将其设置为当前选定的切换,因此所有与 OCaml 相关的操作都将使用此切换。您可以通过运行以下命令来激活它
opam switch my_project
用您的新切换的名称替换 my_project
。
**确认**您已激活它,方法是运行
opam switch
如果输出是您的新切换的名称,则您已成功激活它!现在,您可以将它用于您的 OCaml 项目,并安装特定于此切换的 OCaml 包、库和依赖项,而不会影响其他切换或系统范围的 OCaml 环境。
切换类型
全局切换
全局切换通常用于系统范围的 OCaml 安装,并且不与特定项目或目录绑定。切换是在系统级别创建和配置的,通常用于在全局范围内管理 OCaml 及其生态系统。
创建 opam 切换时,默认情况下它处于全局状态,除非另有配置。您还可以使用带有 --global
标志的 opam switch 命令来显式选择全局切换。
Opam 的**系统切换**是一个全局切换,与您操作系统上的 OCaml 安装相关联。系统切换在整个系统中都是可访问的。
本地切换
另一方面,本地 opam 切换与特定项目目录绑定。它是在项目的目录或子目录中创建的,因此您可以在该特定项目的范围内管理 OCaml 及其依赖项。
换句话说,本地切换为项目特定的 OCaml 环境提供隔离,允许您定义和管理特定项目所需的特定编译器版本和包。
当您希望确保项目使用特定版本的 OCaml 及其包,而不会干扰系统范围或其他项目特定的 OCaml 安装时,它们特别有用。
本地切换会根据当前工作目录自动选择。当您导航到具有关联本地切换的目录时,opam 会在该目录中使用该切换进行任何与 OCaml 相关的操作。
选择切换
opam 中大多数与包相关的命令都在选定的切换的上下文中执行。您可以通过多种方式选择切换
**全局选择**: 使用命令 opam switch <switch>
。除非被覆盖,否则 opam 将对所有后续命令使用此切换。
**本地选择**: 当您在包含切换的目录中工作时,它将被自动选择。本地切换位于 opam 根目录之外。
**环境变量**: 设置 OPAMSWITCH=<switch>
环境变量,以在单个 shell 会话中选择切换。使用 eval $(opam env --switch <switch>)
来相应地设置 shell 环境。
**命令行标志**: 使用 --switch <switch>
命令行标志为单个命令指定切换。
在 opam 手册的文件层次结构页面 和其专门介绍切换的页面 中了解有关 opam 切换的更多详细信息和用法。