gpt4 book ai didi

dependencies - 使用 Opam 管理项目依赖

转载 作者:行者123 更新时间:2023-12-03 20:50:17 27 4
gpt4 key购买 nike

我是 OCaml 的完全新手。我使用过的其他语言(例如 Scala、Clojure、Node.js 上的 Javascript)具有包管理器,允许人们以干净的方式启动一个项目,该项目具有一组已声明的已知版本的依赖项。

我正在尝试用 Opam 做一些类似的事情。理想情况下,我想要一个列出依赖项(可能还有 OCaml 版本)的文件,以便协作者可以开始一个项目

git clone myproject
<magic opam command>
ocamlbuild

并有一个工作版本,而无需在全局范围内安装任何东西。

我知道正确的方法是使用 Opam switches ,但我不确定在实践中该怎么做。似乎开关与编译器版本相关,而不是每个项目(尽管有别名),而且我也找不到是否存在某种项目 Opam 配置文件。

简而言之:假设一个人想根据 Core 和 Yojson 开始一个新项目(例如)。有一个干净的可重复构建的步骤是什么?在这里,干净意味着它不会干扰现有的已安装库,可重现意味着它将在带有新克隆项目的干净机器上运行。

最佳答案

就系统库而言,它不可能真正干净。否则,您需要启动自己的 VM 或其他一些容器。但是对于 OCaml 环境,您可以通过 opam 实现您的目标。项目根目录中的文件。在其中描述了所有依赖项(包括系统一)之后,您可以 pin您的项目,这将安装您的所有依赖项,编译您的项目并将其部署到 opam 堆栈。所以工作流程如下:

 $ # install opam 1.2
$ # install aspcud (optionally, but highly recommended)
$ opam switch install fresh -A 4.02.1
$ opam pin add proj /path/to/proj -n
$ opam depext --install proj
# optional part:
$ edit proj/src/main.ml # do the development
$ opam upgrade proj

现在,让我们逐步了解此工作流程。

安装编译器
 $ opam switch install fresh -A 4.02.1 

此命令创建一个新的编译器安装。这里 fresh没有特殊含义,它只是安装的任意名称。通常,我使用 date +"%y%m%d"命令而不是 fresh创建一个由当前年、月和日组成的名称。

固定项目
$ opam pin add proj /path/to/proj -n

此命令会将您的项目介绍给 OPAM 系统。这就像创建自己的小型软件包存储库,只包含一个软件包 proj .姓名 proj当然只是你的项目的名称,不管它是什么。 pin用途 opam向 OPAM 系统描述您的项目的文件,您可以使用此 instructions 手动创建它.或者您可以允许 pin命令为您创建它。它会温和地引导您完成整个过程,并提出一些问题。您可以在此 blog post 中阅读有关固定的更多信息.

安装包和依赖项

在前面的命令中,我们添加 -n标志,将停止 pin在固定后立即安装您的软件包的命令,因为我们希望逐步移动。
$ opam depext --install proj

此命令将计算您的软件包依赖项的传递闭包并安装它们,包括您的系统依赖项(如果您使用的是 ubuntu 或 fedora,并且如果您在上一步中在 opam 文件中指定了您的依赖项)。

在项目上工作

假设您要开发代码。有一个 OPAM 友好的工作流程:
 $ edit proj/src/main.ml # do the development
$ opam upgrade proj

这将重新安装您的软件包(并重新安装您的软件包的所有依赖项,如果它们存在)。

另一方面,如果您的项目不是很小,这个工作流程有一个严重的缺点,因为它会复制所有源代码并从头开始编译它们。但是,如果您有一组并行工作的依赖包,那么这是一种方法。

编译和其他东西

但这只是关于包管理和包间依赖关系。 OPAM 对特定的构建系统是绝对不可知的,并且不会对它们中的任何一个给予任何帮助(但仍然对其中的一些提供工具支持)。所以,你可以写一个 Makefile自己或拥有自己的一套 shell 脚本来调用 ocamlbuild这完全取决于你。但如果我在你身边,我会使用 OASIS 来管理我的构建过程。 OASIS 本身并不是一个构建系统,它的目的是以跨平台的方式管理构建系统。但默认情况下它使用 ocamlbuild并顺利地与它集成。此外,它还与 OPAM 集成(实际上是 OPAM 与 OASIS 集成)。有一个 oasis2opam包,这将创建一个 opam文件来自 _oasis文件。创建怎么样 _oasis文件,描述您项目的构建过程,那么您可以 create用你最喜欢的文本 emacs 手工创建它,或者你可以让 OASIS 为你创建它 oasis quickstart .

最后,我建议您查看现有项目并将其用作灵感来源。您可以从 BAP 开始项目,我正在维护,但它有相当复杂的配置。所以,可能有一个更简单的例子。

关于dependencies - 使用 Opam 管理项目依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28810855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com