使用 opam 管理依赖项

安装现有依赖项

我们建议在本地 opam 切换中安装项目的依赖项,以隔离您的开发环境。

如果您使用的是 opam 2.0.X,您可以使用以下命令:

# if you need external system dependencies
opam pin add -n .
opam depext -i <packages>
opam install . --deps-only --with-test --with-doc

如果您使用的是 opam 2.1.X,它会自动安装系统依赖项,因此您可以运行以下命令:

opam install . --deps-only --with-test --with-doc

现在,如果您出于某种原因更愿意在全局切换中安装您的依赖项,您可以运行以下命令:

opam switch set <switch_name>
opam install . --deps-only --with-test --with-doc

一旦依赖项成功安装,假设项目使用 Dune 作为构建系统,您可以使用以下命令进行编译:

opam exec -- dune build

或者,如果您使用 eval $(opam env) 设置环境:

dune build

从 opam 仓库添加依赖项

为了避免将项目配置复制到多个文件中,Dune 允许您在添加 (generate_opam_files true) 节时,从 dune-project 中的包定义生成项目的 *.opam 文件。

然而,opam 仍然是生态系统中的核心部分,您很可能在某些时候需要使用 *.opam 文件,因此我们不会对您是否应该在 *.opam 文件或 dune-project 中指定依赖项做出决定。

将依赖项添加到您的 dune-project 文件中

如果项目从 dune-project 生成 opam 文件(您可以从 *.opam 文件顶部的 # This file is generated by dune, edit dune-project instead 行判断),您可以在适当的 package 节中将依赖项添加到 dune-project 中。它应该看起来像这样

(package
 (name demo)
 (synopsis "A short, but powerful statement about your project")
 (description "An complete and exhaustive description everything your project does.")
 (depends
  (ocaml
   (>= 4.08.0))
  dune
  (alcotest :with-test)
  (odoc :with-doc)))

添加依赖项后,您可以使用 dune build 构建项目,这将重新生成 *.opam 文件。

将依赖项添加到您的 .opam 文件中

如果 *.opam 文件没有生成,您可以在 depends 字段中直接添加依赖项。它应该看起来像这样

opam-version: "2.0"
synopsis: "A short, but powerful statement about your project"
description: "An complete and exhaustive description everything your project does."
depends: [
  "ocaml" {>= "4.08.0"}
  "dune"
  "alcotest" {with-test}
  "odoc" {with-doc}
]
build: [
  ["dune" "subst"] {pinned}
  [
    "dune"
    "build"
    "-p"
    name
    "-j"
    jobs
    "@install"
    "@runtest" {with-test}
    "@doc" {with-doc}
  ]
]

无论哪种方式,一旦您在适当的文件中添加了依赖项,您就可以运行 opam install . --deps-only 来更新您当前切换的依赖项。

在您的切换中安装依赖项

要将包从 opam 仓库安装到您的活动切换中,您可以运行以下命令:

opam install <package-name>

以获取包的最新版本。

如果您想安装包的特定版本,请使用以下命令:

opam install <package-name>.<package-version>

代替。

从 Git 仓库添加依赖项

有时,您可能希望直接从 Git 仓库安装包,例如,当它在 opam 仓库中不可用或当您想使用未发布的版本时。

将 Git 依赖项添加到 dune-project 文件中

在使用 Dune 进行构建和 opam 进行包管理的 OCaml 项目中,您可以使用 dune-project.opam.template 文件的组合来指定 Git 依赖项。

这种方法在您希望将 Dune 和 opam 配置保持同步时特别有用,尤其是在处理来自 Git 仓库的外部依赖项时。

如果您的项目没有与您的项目 .opam 文件同名,但文件扩展名为 .opam.template 的文件,您必须创建它。

例如,如果您的项目 opam 文件为 my_project.opam,请创建 my_project.opam.template 并使用 pin-depends 告诉 opam 从 Git 仓库安装包。

pin-depends: [
  ["<package-name>.dev" "git+https://<repository-url>#<branch-or-commit>"]
]

接下来,通过运行以下命令重新生成项目的 .opam 文件:

opam exec -- dune build

然后,运行以下命令:

opam install . --deps-only

以安装您添加的新依赖项。

将 Git 依赖项添加到您的 .opam 文件中

要打开您的 opam 文件,请找到您的 OCaml 项目的 opam 文件。此文件定义了包的依赖项和其他元数据。

如果 opam 文件中不存在 pin-depends 字段,请添加它。在此字段中,您指定包以及应该从中获取它的 URL。例如

pin-depends: [
  ["<package-name>.dev" "git+https://<repository-url>#<branch-or-commit>"]
]

最后,使用 opam install 来安装依赖项,包括 pin-depends 字段中指定的依赖项。

opam install . --deps-only

在您的切换中安装 Git 依赖项

您可以直接从 Git URL 在您的活动切换中安装包

opam pin add <package-name> <git-url>#<branch-or-commit>

处理仅开发依赖项

Opam 没有开发依赖项的概念。相反,每个依赖项可以是以下之一:

  • 正常依赖项(在运行时使用)
  • 构建依赖项(用于构建项目)
  • 测试依赖项(用于测试项目)
  • 文档依赖项(用于生成文档)

在添加新依赖项时,如“更新依赖项”工作流中所示,您可以向依赖项添加标志。

对于 dune-project,它看起来像这样

(alcotest :with-test)

对于 *.opam 文件,它看起来像这样

"alcotest" {with-test}

每个依赖项的可用标志为

  • 正常:无标志
  • 构建:build
  • 测试:with-test
  • 文档:with-doc

有关 opam 语法的更多详细信息,请参见 opam 文档

仍然需要帮助?

帮助改进我们的文档

所有 OCaml 文档都是开源的。看到错误或不清楚的地方?提交一个 pull request。

OCaml

创新。社区。安全。