想象一下,我有两个软件包foo
和bar
,其中foo
是bar
的依赖项。 foo
已安装,我现在想将bar
与pip
一起安装。是否可以不升级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).
据我所知,这仅涉及“始终更新”和“仅在需要时更新”的情况,而不适用于“从不更新”的情况。
答案 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>