如何在 conda 虚拟环境中卸载所有未使用的软件包?
Posted
技术标签:
【中文标题】如何在 conda 虚拟环境中卸载所有未使用的软件包?【英文标题】:How to uninstall all unused packages in a conda virtual environment? 【发布时间】:2016-07-18 10:31:56 【问题描述】:我有一个 conda 虚拟环境,其中安装了几个未使用的软件包(使用 pip install
或 conda install
)。
清理它的最简单方法是什么,以便只保留我的代码实际使用的包,而卸载其他包?
【问题讨论】:
您可能想看看conda clean --packages
。特别是,您可以先使用“dry-run”设置进行尝试——即conda clean --packages --dry-run
。我认为它只是在寻找未在任何 conda 环境中使用的包。因此它不会检查您是否在代码本身中使用它,但它可能很有用。
【参考方案1】:
conda clean --yes --all
将消毒一切。但请注意:如果您想做任何类型的--offline
操作,请不要使用--all
;更有选择性。
【讨论】:
这不会卸载包,它只会删除下载的包文件。 你知道conda clean --yes --packages
有什么区别吗?有趣的是,对我来说,--packages 找到的数据量是 --all 选项的两倍。
@Agile Bean conda clean --yes --all 和 conda clean --yes --packages 之间的区别在于,包只是提取的文件夹。所有其他文件(.tar.bz2、.conda,即:tarballs)都不会被 --packages 清理。如果您只想清理 tarball,则需要 conda clean --yes --tarballs 参考:***.com/questions/44708392/…
@Lorenz 感谢您的澄清!那我只是想知道为什么--packages
发现的文件比--all
多...
@AgileBean 我添加了一个单独的答案。【参考方案2】:
@AgileBean 我尝试回答您关于为什么--packages
比--all
为您提供更多结果的评论问题。希望这仍然与如何卸载的主要问题有关。
两者的区别
conda clean --yes --all
和
conda clean --yes --packages
是包只是提取的文件夹。 --packages
没有清理所有其他文件(.tar.bz2、.conda,即:tarballs)。
如果您只想清理 tarball,则需要
conda clean --yes --tarballs
参考资料: Anaconda Python: Delete .tar.gz in pkgs
以下是差异的示例。注意 --all 在实际运行中包含 --packages,但它不会显示 --packages 导致空运行(很奇怪!请看下面的屏幕截图,它只是停在DryRunExit: Dry run. Exiting.
)
存在哪些差异可以解释您使用--packages
找到的内容比使用--all
更多?
如前所述,我的第一个猜测是您只使用了空运行选项,当您运行 conda clean --all --dry-run
时,它不会显示已清理的 --packages
。因此从conda clean --all
看到这个真实的运行:
这两个警告可能很有趣:
WARNING: C:\Users\Admin\.conda\pkgs does not exist
WARNING: C:\Users\Admin\AppData\Local\conda\conda\pkgs does not exist
但如果你不试运行,而是真正运行--all
,你会得到
同样,因为--all
包括--packages
,因此它
警告也是如此。再次,当您使用空运行时,看不到这一点。
一个很好的理由可能是你曾经清理过你的包裹
使用 --tarballs
或者您只是删除了一些 tarball
手动使您的解压缩包数量超过 --dry-run
中的 tarball。
您可能已经手动将大量包解压缩到缓存中
文件夹,例如来自 git 和所有其他的手动安装
不提供 conda / pip install 的安装,然后在 --dry-run
中,--all
退出而不显示 --packages
。
也许您在文档中发现了另一件事?
https://docs.conda.io/projects/conda/en/latest/commands/clean.html。
它说关于符号链接:“警告:这不会检查使用符号链接安装的软件包返回到软件包缓存。”由于--packages
是--all
的一部分,这仍然没有解释您的区别。
我猜你的--packages
> --all
问题的原因是conda clean --all --dry-run
没有显示--packages
的结果,尽管它也清理了它们,所以你实际上没有这个问题;)。
【讨论】:
【参考方案3】:对于它的价值,我注意到以下...
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,没有提及包
我继续,conda clean --tarballs
然后重新运行conda clean --all --dry-run
...你猜怎么着?它现在显示了包(在提到没有 tarball 之后,这是合乎逻辑的,因为我刚刚清理了它们)
我的结论...当缓存中仍有 tarball 时,conda clean --all --dry-run
不会为您提供将/可以删除的全部内容
【讨论】:
以上是关于如何在 conda 虚拟环境中卸载所有未使用的软件包?的主要内容,如果未能解决你的问题,请参考以下文章