如何升级单个包?
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
也可以帮助不修改任何其他内容。
我做了 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
也可以帮助不修改任何其他内容。