我可以只将直接安装的软件包更新为pip吗?

时间:2018-12-26 16:01:25

标签: pip

如何列出直接用pip安装的软件包,从而省去由此产生的依赖关系?

我有一个运行过的virtualenv,像这样的命令

$ pip install A B C
$ pip install X Y Z

因此,我不仅安装了A,B,C,X,Y和Z,而且还安装了依赖项p,q,r,s,t,u,v和w。但是查看任何给定的软件包,我都无法回忆起它是否是我直接安装的。我想将直接安装的软件包保留在此venv中,将其更新为

$ pip install -U --directly-installed
具有以下效果的

$ pip install -U A B C X Y Z

是否有办法仅使直接安装的软件包保持最新状态(仅按那些软件包的要求更新其依赖性)?

2 个答案:

答案 0 :(得分:2)

在工作中,我们手动处理直接安装的软件包的列表。也就是说,如果我们需要一个包,则将其添加到requirements.txt并运行

pip install -r requirements.txt

然后我们运行

pip freeze > requirements-freezed.txt

保存软件包和依赖项的完整列表。当我们需要重新创建虚拟环境时,我们运行

pip install -r requirements-freezed.txt

您只升级直接安装的软件包的任务将是

pip install -U -r requirements.txt
pip freeze > requirements-freezed.txt

答案 1 :(得分:-1)

从pip文档中:

-升级策略     确定应如何处理依赖项升级[默认值:仅当需要时]。 “渴望”-依赖项将被升级,而不管当前安装的版本是否满足升级后的软件包的要求。 “仅在需要时”-仅当它们不满足升级的软件包的要求时才进行升级。

所以看来您想要的已经是默认行为,但是如果您想明确一点:

pip install -U --upgrade-strategy only-if-needed A B C X Y Z