如何升级单个包?

How to upgrade a single package?

我做了 opam update,然后 opam upgrade,现在 OPAM 想要将 10 个包升级到更新的版本。

但是,由于担心不小心破坏了某些东西,我想升级一个 单个 包,而不触及其他包。这个包没有依赖关系,似乎 none 的其他包依赖于它。

然而,opam upgrade <package>的结果与opam upgrade相同,即OPAM要升级所有10个包,而不仅仅是我想要的那个。

我什至试过opam install <package>.<new version>,但它也想一次升级所有东西

有没有办法只升级这一个包,而不影响其他包?理论上没有任何问题应该发生,但在实践中它经常发生...

我发现这样做

opam reinstall <package>.<new version>

允许我得到我想要的,即只安装<package>及其依赖,而不升级不相关的包。

OPAM 发出警告 ([WARNING] <package>.<new version> is not installed.),但它还是建议我安装它。

之后,尽管有一些关于目标目录不为空的警告(由于已经安装了以前的版本),OPAM 能够只安装所需的包,而无需升级所有内容。

请注意,如果我尝试安装 new 软件包,也会发生同样的事情:因为我之前的 opam update 添加了几个软件包到更新列表,试图安装任何东西通过 opam install 将触发 "update everything" 算法,而 opam reinstall 不会。

我不知道这是否是不受欢迎的行为,但如果是这样,我希望它在未来的 OPAM 版本中仍然可用,或者有一种方法可以忽略不相关的升级。

Edit:如 this OPAM Github issue 所示,使用 --criteria=paranoid--criteria=-changed,-notuptodate 也可以帮助不修改任何其他内容。