【问题标题】:Can I keep only directly installed packages up to date with pip?我可以只使用 pip 使直接安装的软件包保持最新吗?
【发布时间】:2019-05-24 20:21:42
【问题描述】:

如何列出我使用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

有没有办法让直接安装的软件包保持最新状态(仅根据这些软件包的要求更新它们的依赖关系)?

【问题讨论】:

  • 你不能,因为pip 不会跟踪软件包是显式安装还是作为依赖项安装。使用pipdeptreepip-chill 之类的工具,您可以获得“顶级”包的列表,因为它们不是某些其他包的依赖项。这些肯定是您明确安装的(pipsetuptoolswheel 除外,如果您在 venv 中)。
  • 然而,这个列表不够完整/可靠——例如想象你pip install numpy,然后是pip install scipy。现在,虽然numpy 已显式安装,但它成为scipy 的依赖项,因此不再列为“顶级”包。
  • @hoefling 这听起来像是答案:我需要返回并冻结,找出我直接安装的内容,修剪requirements.txt,然后只修剪pip -U requirements.txt。对吗?
  • 是的。在你有一个干净的需求文件之后,将它作为一种“世界”文件来处理,你可以在其中放置所有要安装的包,正如@phd 在他的回答中所描述的那样:pkg 的安装现在就像echo pkg >> world.txt && pip install -r world.txt 一样。

标签: pip


【解决方案1】:

来自 pip 文档:

--升级策略 确定应如何处理依赖项升级 [默认值:仅在需要时]。 “eager” - 无论当前安装的版本是否满足升级包的要求,都会升级依赖项。 “仅在需要时” - 仅在它们不满足升级包的要求时才升级。

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

pip install -U --upgrade-strategy 仅在需要时 A B C X Y Z

【讨论】:

  • 抱歉:我不记得 A B C X Y Z 是什么了!如果我记得有哪些软件包是因为我要求它们,哪些是作为依赖项安装的,那么确实没有问题。
  • 也许这个答案会对您有用:stackoverflow.com/a/40074640/5768509 它链接到一个实用程序,可以为您的项目提取最小环境。我没用过,所以不能保证……除此之外,你可以尝试单独升级每个感兴趣的包。如果您不知道要更新什么,那为什么还要更新呢?
【解决方案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

【讨论】:

  • 将使用位于该 virtualenv 中的 virtualenv 安装包中的 pip,还是在运行 pip 时该 virtualenv 也需要处于活动状态?
  • virtualenv 需要被激活,但你可以通过从 bin/ 目录运行 pythonpip 来实现这一点。类似/path/to/virt/env/bin/python -m pip install…
  • 有一个关于如何在 PyCharm 外部工具here 中应用它的问题。
猜你喜欢
  • 2018-06-11
  • 2019-04-21
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多