使用 opam 管理相依性

安裝現有相依性

我們建議在本地 opam switch 中安裝專案的相依性,以隔離您的開發環境。

如果您使用 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

現在,如果由於某些原因您偏好在全域 switch 中安裝相依性,您可以執行

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

一旦成功安裝相依性,並且假設專案使用 Dune 作為建置系統,您可以使用以下指令進行編譯

opam exec -- dune build

或者,如果您使用 eval $(opam env) 設定您的環境

dune build

從 opam 儲存庫新增相依性

為了避免將專案設定複製到多個檔案中,當新增 (generate_opam_files true) 節點時,Dune 允許您從 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 節點中新增您的相依性。它應該看起來像這樣

(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 來更新您目前 switch 的相依性。

在您的 Switch 中安裝相依性

若要從 opam 儲存庫將套件安裝到您目前的 switch,您可以執行

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

在您的 Switch 中安裝 Git 相依性

您可以直接從 Git URL 在您目前的 switch 中安裝套件

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

創新。社群。安全。