gpt4 book ai didi

python - Conda删除卸载的软件包比预期多

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:04 26 4
gpt4 key购买 nike

简化的 MWE => 假设我有 Anaconda 并执行以下操作:

conda create -n demo python=3.6
conda activate demo
conda install seaborn

最后一个命令安装 39 个新软件包,包括 seabornmatplotlibpandas。现在假设时间过去了,我继续设置环境并希望显式安装 matplotlibpandas:

conda install matplotlib pandas

这告诉我“所有请求的软件包都已安装”,这没关系。但是现在,如果我决定不再需要 seaborn 并将其删除,

conda remove seaborn

这会删除安装 seaborn 时安装的所有 39 个软件包,包括 matplotlibpandas,这是我在之后明确安装的!如何避免这个问题?

我的预期行为是 conda remove seaborn 删除 seaborn 及其所有依赖项,但删除任何包(或依赖项)其中)在 seaborn 之前或之后显式安装。有些人可能会说只需卸载 seaborn 和所有 39 个软件包,然后手动重新安装 matplotlibpandas 即可。这在微不足道的情况下有效,但是一旦有例如25 个具有复杂相互依赖关系的包,这变得非常复杂,并且至少维护起来非常麻烦。

作为一个具体示例,如何构建一个完整的 Anaconda 环境,减去特定的包以及依赖于它的包?我尝试过:

conda create -n test python=3.6 anaconda
conda remove libtiff # I want this to strictly only remove libtiff and its recursive dependents, but obviously this is not what happens

但是第二行基本上删除了整个环境中的每个包,因为它删除了 anaconda。有什么想法吗?

最佳答案

解决方法

我想不出一种自动化的方法来做到这一点,但如果你绝对必须实现这一点,那么一种巧妙的方法是:

  1. 仅删除您想要的包:

    conda remove --force libtiff
  2. 触发一致性检查以获取现已损坏的包的列表:

    conda install -d python
  3. 如果有包,则迭代(即通过步骤 1 删除它们);否则,你就完成了。

实际上,您还没有完成,因为现在每次您尝试更改环境时,每个不依赖于显式规范的包都会被建议删除。下一步可能是:

  • 导出生成的环境:

    conda env export -n my_env > env.yaml
  • 重新创建环境:

    conda env remove -n my_env
    conda env create -n my_env -f env.yaml
  • 现在所有的软件包都将是明确的规范,这也不一定是一件好事,但至少确保它们不会在以后的更新中被删除。

    评论

    就我个人而言,我认为这是一个坏主意,并且没有真正看到其动机。我认为最好从您知道需要的包开始,将它们放入 YAML 定义中,然后从中创建环境。

    关于python - Conda删除卸载的软件包比预期多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441645/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com