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

时间:2010-05-18 21:10:06

标签: python virtualenv pip

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

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

3 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:40)

概述:

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

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

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

pip install -U --no-deps mypackage

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

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

如果程序包需要的版本高于安装版本,则只会更新要求。

答案 2 :(得分: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...