使用pip安装新软件包时,防止已安装的软件包升级

时间:2020-10-23 21:16:59

标签: python pip

想象一下,我有两个软件包foobar,其中foobar的依赖项。 foo已安装,我现在想将barpip一起安装。是否可以不升级foo来做到这一点?特别是,我想安装对bar的安装版本感到满意的foo的最新版本。

来自pip help install

--upgrade-strategy <upgrade_strategy>
                            Determines how dependency upgrading should be handled
                            [default: only-if-needed]. "eager" - dependencies are
                            upgraded regardless of whether the currently installed
                            version satisfies the requirements of the upgraded
                            package(s). "only-if-needed" -  are upgraded only when
                            they do not satisfy the requirements of the upgraded
                            package(s).

据我所知,这仅涉及“始终更新”和“仅在需要时更新”的情况,而不适用于“从不更新”的情况。

1 个答案:

答案 0 :(得分:3)

pip install bar(根本没有升级标志)应该可以满足您的要求。 pip应该选择当前安装的foo,除非bar明确指出该版本不兼容。新的(2020)解析器还能够通过自动地逐一尝试可用的版本(称为 backtracking ,来找到可以与当前安装的bar版本一起使用的foo版本。 >),然后进行安装。 2020解析器是pip 20.2中的一项可选功能,可通过--use-feature=2020-resolver获得,并计划在20.3(2020年10月发布)中成为默认功能。

但是,需要注意的是,Python打包不能提供一种无需下载软件包即可发现版本冲突的方法(有时甚至是从源代码构建)。 1 如果软件包bar的下载(例如tensorflow)和/或构建(例如,您要在不受支持的平台(例如Alpine Linux)上安装numpy)和/或构建成本很高。在那种情况下,唯一的选择是手动指定版本,因为pip无法知道可以使用bar的哪个版本,除非您明确地告诉它,而又不尝试下载它的各种版本。 / p>