2010-05-18 156 views
38

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

我也试过pip install -U --no-deps,但这似乎相当于一次常规安装而不是升级。是否有组合的标志可以做我想要的?

+0

很好的问题。我交叉http://stackoverflow.com/questions/2875232/list-python-package-dependencies-without-loading-them - 如果你甚至不能提前列出依赖项,似乎你卡住了。 – denis 2010-05-20 16:17:15

回答

43

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

+0

当你给一个特定的压缩包和一个包名称时,我的行为有所不同。 Carl Meyer提供了一个有用的解释:http://groups.google.com/group/python-virtualenv/msg/d702c251a6dc40a5 – 2010-06-10 16:28:31

+0

我强烈建议事后运行'pip check'来检查是否存在缺失依赖关系的问题。 – Flimm 2017-02-14 14:19:28

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... 
25

UPDATE(感谢@益帖的评论):如果你正在使用最新版本的PIP的,然后更新依存关系现在是默认只在必要时行为,而且你不需要做任何特别的事情!下面的答案概述了旧版pip的步骤(如果您想要便携,也适用于较新版本)。

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

pip install -U --no-deps mypackage 

但我认为你会通常希望是,除非它的要求不升级的依赖。在这种情况下,你可以使用:

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

这仅更新的要求,如果包装需要比安装新版本。

+0

这是现在在PIP新的默认策略:https://github.com/pypa/pip/pull/4500 – Jether 2017-10-22 14:30:14

+0

LoL,我只是盲目地从答案复制命令,它确实安装了一些['mypackage'](https ://pypi.python.org/pypi/Mypackage/0.1)放到我的python中。 – ImportanceOfBeingErnest 2018-02-02 15:35:49