【问题标题】:pip: how to see who needs a module BEFORE uninstall? [duplicate]pip:如何在卸载之前查看谁需要模块? [复制]
【发布时间】:2020-04-10 09:42:57
【问题描述】:

在卸载之前是否可以使用 pip 来查看谁需要模块?怎么样?

这就是我问的原因:

在 RPM 包中:

  • 每个软件包都列出了它自己的软件部门
  • 当你去执行yum remove NAME 时,yum 说“PACKAGE_A, PACKAGE_B, ... 每个都依赖于NAME”然后 yum 会弹出一个交互式提示询问“你想删除 NAME 和 PACKAGE_A, PACKAGE_B ,...,是还是不是?”
  • yum 告诉我,做 yum remove NAME 会破坏其他事情......所以我说“不”并重新考虑(或者说是,因为我想要 PACKAGE_A、PACKAGE_B、...,删除)

在 PIP 封装中:

  • 每个软件包都列出了它自己的软件部门
  • 当你去做pip uninstall botocore pip 时说“你想删除 ${list_of_files_for_botocore_package},是还是不是?”
  • 你说是因为你想删除 botocore
  • 那你怕弄坏东西所以你这样做
  • 点检查
  • 然后您会看到“boto3 ... 需要未安装的 botocore”
  • pip 卸载现在使一个或多个模块处于损坏状态
    • 尽管 pip 提前知道 boto3 需要 botocore...
    • pip 可能会像 yum 那样警告我或说些什么或提议删除 boto3

我想我可以编写一些 python 代码来构建一个图形...然后通过查看图形找出谁需要 botocore...但我想知道... pip 是否已经具有这样的功能?似乎默认行为不是那么好(它至少应该打印一条消息)。

【问题讨论】:

  • 据我所知,pip 中没有这样的东西,但 pipdeptreedeptree 等工具可以提供帮助。
  • @sinoroc 我只是对导致一个或多个损坏状态的默认行为感到惊讶。但也许解决方案是使用您的解决方法并始终与pipdeptree -r联系。
  • 搜索中的所有答案都是关于反向依赖
  • @phd 你不认为:stackoverflow.com/q/9232568/52074 是一个更好的副本(它有 147 票,而且 IMO 提供了 pipdeptree 解决方案......这要好得多......你链接到的那个。 ..几乎没有IMO那么高质量)。还有问题 9232568 是一年前的。

标签: python pip dependency-management package-managers


【解决方案1】:

简而言之:没有

  • pip 看起来并没有开箱即用的反向依赖检查器。
  • pip 路线图看起来不会很快改变 uninstall 的行为。
  • 所以总的来说答案是:没有

解决方法:您必须使用第三方解决方案,例如 pipdeptreepipdep

确保在致电pip uninstall 之前始终检查反向软件部门,看看您是否会破坏任何东西。

【讨论】:

    【解决方案2】:

    你想要的是 pipenv。 Pipenv 负责通过几个简单的步骤安装您的软件包并设置您的虚拟环境。 要查看使用 pipenv 安装软件包时使用了什么,请在终端中运行命令

    pipenv graph
    

    你应该得到一个所有依赖的树列表

    【讨论】:

    • 据我所知,pipenv graph 在后台使用 pipdeptree。但另一方面,pipenv uninstall 是否会以某种方式警告即将卸载的项目是否依赖于其他当前安装的项目,因此可能会出现问题?从某种意义上说,这将为引发原始问题的问题提供解决方案。
    • 不,pipenv uninstall 不会警告你是否依赖
    猜你喜欢
    • 2021-05-18
    • 2013-09-18
    • 2021-05-26
    • 2023-03-03
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多