64

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

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

4

3 回答 3

63

概述:

  • 安装新软件包而不升级已安装的软件包:(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

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

pip install --upgrade --upgrade-strategy only-if-needed mypackage

这仅在软件包需要比已安装版本更新的版本时更新要求。

于 2017-01-04T19:21:59.467 回答
58

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

于 2010-05-21T09:22:29.990 回答
4

你是对的。我以为当我添加--no-deps它时忽略了卸载现有版本。但我又试了一次,发现没有问题:

$ pip install -U --no-deps myproj
Downloading/unpacking myproj
  Downloading myproj-1.0-trunk.31072.tar.gz (43Kb): 43Kb downloaded
  Running setup.py egg_info for package myproj
Installing collected packages: myproj
  Found existing installation: myproj 1.0-trunk.31053
    Uninstalling myproj:
      Successfully uninstalled myproj
  Running setup.py install for myproj
Successfully installed myproj
Cleaning up...
于 2010-06-10T00:00:11.720 回答