我做了opam update
然后opam upgrade
,现在 OPAM 想要将 10 个软件包升级到更新的版本。
但是,由于担心无意中损坏某些东西,我想升级单个软件包,而不影响其他软件包。该包没有依赖项,并且似乎其他包都没有依赖于它。
但是,做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 仍能够仅安装所需的软件包,而无需升级所有内容。
请注意,如果我尝试安装新软件包,也会发生同样的事情:因为我以前的 opam update
在更新列表中添加了几个软件包,尝试通过 opam install
安装任何内容将触发“更新所有内容”算法,而 opam reinstall
不会。
我不知道这是否是不受欢迎的行为,但如果是这样,我希望它在未来的 OPAM 版本中仍然可用,或者有一种方法可以忽略不相关的升级。
编辑:如 this OPAM Github issue 中所示,使用--criteria=paranoid
或--criteria=-changed,-notuptodate
还可以帮助您不修改任何其他内容。
关于ocaml - 单个套餐如何升级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351326/