2

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

但是,由于担心无意中破坏某些东西,我想升级一个,而不涉及其他包。这个包没有依赖关系,似乎没有其他包依赖它。

但是,这样做opam upgrade <package>的结果是一样的opam upgrade,即 OPAM 想要升级所有 10 个包,而不仅仅是我想要的那个。

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

有没有办法只升级这个单一的包,而不触及其余的?理论上什么都不应该打破,但在实践中它经常发生......

4

1 回答 1

2

我发现这样做

opam reinstall <package>.<new version>

允许我获得我想要的,即安装包<package>及其依赖项,而无需升级无关的包。

OPAM 发出警告 ( [WARNING] <package>.<new version> is not installed.),但它建议我无论如何都要安装它。

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

请注意,如果我尝试安装软件包,也会发生同样的事情:因为我之前opam update在更新列表中添加了几个软件包,所以尝试通过安装任何东西opam install都会触发“更新所有内容”算法,而opam reinstall不会。

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

编辑如此 OPAM Github 问题所示,使用--criteria=paranoidor--criteria=-changed,-notuptodate也可以帮助不修改任何其他内容。

于 2015-10-26T16:56:38.280 回答