使用pip升级包而不升级依赖项?
我在为我的Python应用程序使用pip和virtualenv。我想升级到应用程序的新版本,但又不想更改依赖包。当我使用pip install -U
时,它会尝试升级所有的包,甚至在没有新版本的情况下还会卸载并重新安装同样版本的依赖包。
我也试过pip install -U --no-deps
,但这似乎和普通安装没什么区别,而不是升级。有没有什么组合的选项可以实现我想要的效果?
3 个回答
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...
61
我刚在我的虚拟环境项目中试了一下,发现 pip install -U --no-deps mypackage
运行得很好。它只下载了 mypackage,没有其他东西。你那边的环境是什么样的呢?
79
概述:
- 安装新包时不升级已安装的包:使用
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
这只会在包需要比已安装的版本更新的版本时,才更新需求。