管理 Chocolatey 包依赖项

Manage Chocolatey package dependencies

我是 Chocolatey 的新手,我安装了 zulu 作为 Oracle Java (choco install zulu) 的替代品。 然后我安装了一个需要 Java choco install pdfsam.install 的应用程序,它安装了 Oracle JRE 作为依赖项。我自以为聪明,后来,我尝试choco uninstall javaruntime。但是我得到一个错误 "because 'pdfsam.install 3.3.2' depends on it.".

通过阅读命令的帮助,我看到了安装开关 --ignore-dependencies 和卸载开关 --force-dependencies--force.
前两个很清楚。所以我可以:

choco uninstall pdfsam.install --force-dependencies
choco install pdfsam.install --ignore-dependencies

至于 --force,它的作用尚不清楚,因此不鼓励使用它:

--force
Force - force the behaviour. Do not use force during normal operation - it subverts some of the smart behaviour for commands.

这可能意味着卸载一个包,即使另一个包依赖它。 (谁知道?)

我的问题是:

  1. 如果我 运行 例程 choco upgrade all 删除依赖项怎么办?
  2. 我的应用只是一个例子。除了 JRE 之外,应用程序可能还有其他不可忽略的依赖项。我可以选择性地忽略依赖项吗?

当你强制卸载一个依赖项目时,一旦依赖项目更新,这个依赖将被重新安装。

例如:

一个包'foo'依赖于一个包'bar' 您决定安装 foo,因此也会安装 bar。

现在您可以强制卸载 bar,但 foo 仍保持安装状态 (choco uninstall bar --force)。 一旦你更新 foo,如果它仍然依赖于 bar,bar 将再次安装。

示例命令序列:

choco install foo

  • 安装 foo 和 bar

choco uninstall bar

  • bar 不会卸载并打印消息 foo 取决于它

choco uninstall bar --force

  • 强制卸载(foo 是否仍然正常工作取决于包,无法判断某些未知包)

choco upgrade foo

  • 这将升级 foo(如果存在更新版本)并确保满足所有依赖项 - 因此 bar 将再次安装

我已经将一个要点与此示例所需的 nuspec 和输出放在一起: https://gist.github.com/mwallner/b10bcd6ccd1f7b3d65a56a06c8c8aa0a

关于你的第二个问题,我不知道是否可以选择性地忽略依赖项,也许 ferventcoder 可以提供帮助。

首次安装时,您将希望使用 --ignore-depdendencies(或明确指定的升级),然后打开 useRememberedArgumentsForUpgrades 功能。然后,当您升级时,它可能会继续忽略依赖项(只要那不是被忽略的开关之一)。

如果您发现它不是被忽略的,请在 https://github.com/chocolatey/choco/issues/new 提交一张票,让我们将其添加为增强功能。