升级包而不使用pip升级依赖项?

Amy*_*y G 46 python pip virtualenv

我正在为我的python应用程序使用pip和virtualenv.我想在不触及依赖项的情况下升级到新版本的应用程序.当我使用时pip install -U,它会尝试升级所有软件包,甚至在没有新版本时卸载并重新安装相同版本的依赖软件包.

我也试过,pip install -U --no-deps但这似乎相当于常规安装而不是升级.是否有标志组合可以满足我的需求?

Y.H*_*ong 51

我刚试过我的virtualenv项目,pip install -U --no-deps mypackage似乎工作得很好.它只是下载mypackage而不是别的.你的设置是什么样的?

  • 我强烈建议随后运行“pip check”来检查是否存在缺少依赖项的依赖项的问题。 (3认同)

Mar*_*ark 45

概述:

  • 安装新软件包而不升级已安装的软件包:( pip install-U)
  • 仅根据要求升级过时的软件包:( pip install --upgrade --upgrade-strategy only-if-needed新版本中的默认值)
  • 将软件包和所有依赖项升级到最新版本:( pip install --upgrade --upgrade-strategy eager旧版本中的默认值)
  • 安装或升级列出的软件包而不涉及依赖项: - no-deps

更新(感谢@ Jether的评论):如果您使用的是最新版本的pip,那么仅在必要时更新依赖项现在是默认行为,您不需要做任何特别的事情!下面的答案概述了旧版本pip的步骤(如果你想要便携式,它也适用于较新版本).

如果你真的不想接触依赖,那么确实要走的路是

pip install -U --no-deps mypackage
Run Code Online (Sandbox Code Playgroud)

但我认为你通常想要的是不要升级依赖项,除非它是必需的.在这种情况下,您可以使用:

pip install --upgrade --upgrade-strategy only-if-needed mypackage
Run Code Online (Sandbox Code Playgroud)

如果程序包需要比安装的版本更新的版本,则仅更新要求.

  • 大声笑,我只是从答案中盲目复制了命令,确实将一些[`mypackage`](https://pypi.python.org/pypi/Mypackage/0.1)安装到了我的python中。 (2认同)
  • 我相信渴望是默认的。only-if-needed 将是 pip 10.0 中的默认设置:https://github.com/pypa/pip/pull/4500/files、https://pypi.python.org/pypi/pip。 (2认同)
  • 有没有“仅当不存在时”的选项?我不希望 PIP 触及任何现有的软件包,但让它安装缺少的软件包...... (2认同)