如何在conda虚拟环境中卸载所有未使用的软件包?

时间:2016-03-30 12:12:45

标签: python pip anaconda package-managers conda

我有一个conda虚拟环境,其中安装了几个未使用的软件包(使用pip installconda install)。

清理它的最简单方法是什么,以便只保留我的代码实际使用的包,而其他包已卸载?

3 个答案:

答案 0 :(得分:24)

conda clean --yes --all

会消毒一切。但请注意:如果您想进行任何类型的--offline操作,请不要使用--all;更有选择性。

答案 1 :(得分:7)

@AgileBean我尝试回答您的评论问题,即为什么--packages--all给您更多的结果。希望这仍然与主要问题有关如何卸载。

两者之间的区别

    conda clean --yes --all

    conda clean --yes --packages

是软件包仅是提取的文件夹。其他所有文件(.tar.bz2,.conda,即:tarball)都不会被--packages清除。

如果您只想清洁压缩包,则需要

    conda clean --yes --tarballs

参考: Anaconda Python: Delete .tar.gz in pkgs

这里是差异的一个示例。请注意,--all实际运行中都包含--packages,但并没有显示--packages处于空运行状态(非常奇怪!请参见以下屏幕截图,它仅在DryRunExit: Dry run. Exiting.处停止)

conda clean --all --dry-run vs. conda clean --packages --dry-run

存在哪些差异可以解释说,与--packages相比,--all的发现更多?

  1. 如前所述,我的第一个猜测是您只使用了空运行选项,该选项在运行--packages时不会向您显示已清理的conda clean --all --dry-run。因此,请参见conda clean --all的真实运行情况:

    conda clean --all

  2. 这两个警告可能很有趣:

    WARNING: C:\Users\Admin\.conda\pkgs does not exist                                                                                                                                           
    WARNING: C:\Users\Admin\AppData\Local\conda\conda\pkgs does not exist
    

    但是,如果您不是空运行,而是真正运行--all,则会得到 相同,因为--all包含--packages并因此包含 警告。同样,在空运行时看不到这一点。

  3. 一个很好的原因可能是您曾经清洁过包裹 --tarballs,或者您只是删除了一些压缩包 手动操作,以使解压缩后的软件包在--dry-run中的压缩包数量超过其压缩包。

  4. 您可能已经手动将许多软件包解压缩到缓存中 文件夹,例如git和其他所有的手动安装 不提供conda / pip安装的安装,然后再次在--dry-run中退出--all,但不显示--packages

  5. 也许您在文档中找到了其他东西? https://docs.conda.io/projects/conda/en/latest/commands/clean.html。 它说明符号链接:“警告:这不会检查使用符号链接返回到程序包缓存的程序包。” 由于--packages--all的一部分,因此仍然没有解释你的差异。

我想您的--packages> --all问题的原因是,尽管conda clean --all --dry-run也会清除--packages的结果,所以它不会显示Sub test() Dim Arr() as Variant Dim CurrDoc as Word.Document ReDim Arr(0 to 39, 0 to 1) Arr() = FillArr(CurrDoc, Arr()) End Sub Function FillArr(CurrentDocument As Word.Document, CurrentArray() As Variant) As Variant j = 1 For Each chk In CurrentDocument.ContentControls If chk.Type = 8 Then CurrentArray(j, 1) = chk.Title CurrentArray(j, 2) = chk.Checked j = j + 1 End If Next chk FillArr() = CurrentArray() End Function 的结果,因此您实际上没有这个问题;)。

答案 2 :(得分:2)

就其价值而言,我注意到以下...

  • conda clean --all --dry-run 给了我大约 2GB 的空间
  • conda clean --packages --dry-run 给了我大约 6GB 的空间

与 OP 观察到的差异相同...

当我下一次执行 conda clean --tarballs --dry-run 时,我注意到它也给了我 2GB,奇怪...比较第一个和最后一个命令的输出似乎 conda clean --all --dry-run 只向我展示了 tarball,没有提到包< /p>

我继续,做了conda clean --tarballs,然后重新运行conda clean --all --dry-run...你猜怎么着?它现在显示了包(在提到没有 tarball 之后,这是合乎逻辑的,因为我刚刚清理了它们)

我的结论...当缓存中仍有 tarball 时,conda clean --all --dry-run 无法为您提供将/可能删除的内容的全貌