【问题标题】:How do I remove orphan packages from a Conda environment?如何从 Conda 环境中删除孤立包?
【发布时间】:2021-08-10 16:52:22
【问题描述】:

我在 Conda 环境中卸载了一些包,并想删除其未使用的依赖项,即卸载孤立包。有这个命令吗?

conda clean -p 不是我想要的,因为它只会从包缓存中删除未使用的包,但如果包仍然安装在环境中,它不会被标记为未使用。

【问题讨论】:

    标签: conda


    【解决方案1】:

    我认为 Conda 在使用 conda remove 命令时会自动执行此操作,因为它会触发完全重新求解并仅保留新求解的版本。但是,为了这个问题,我认为这个前提是理所当然的(也许你从文件系统中删除了一些东西,或者使用了强制标志等)。

    我本来打算建议 --prune 标志(conda env update 的一部分),但这似乎失去了它的功能。相反,一种方法是重新创建环境。比如:

    # save a full backup, just in case
    conda env export -n foo > foo.full.yaml
    
    # this is the version we’re interested in
    conda env export -n foo --from-history > foo.min.yaml
    
    # remove the old one
    conda env remove -n foo
    
    # recreate it from already installed packages
    conda env create -n foo -f foo.min.yaml --offline
    
    # (optional) clean up unused packages
    # conda clean -p
    

    不幸的是,不是单线。希望--offline 标志能发挥作用——主要是我们希望它只从已安装的包中重新创建环境。

    Pip 安装包

    请注意,上述方法不适用于 pip 安装的软件包。虽然 Conda 可以检测到由 pip 安装的软件包的存在,但它不会在 conda-meta/history 文件中跟踪它们,因此在使用 --from-history 标志时不会包含它们。

    由于foo.full.yaml 将包含pip 安装的软件包,一种可能的解决方法是编辑foo.min.yaml 以特别包含该部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多