【问题标题】:Is it safe to manually delete all files in pkgs folder in anaconda python?在anaconda python中手动删除pkgs文件夹中的所有文件是否安全?
【发布时间】:2019-10-09 11:56:16
【问题描述】:

我运行这个命令来释放 anaconda 上的磁盘空间

$ conda clean -all

但是,anaconda python 的pkgs 文件夹中仍有一些大文件。

手动删除pkgs文件夹中的所有文件是否安全?有损坏我的 anaconda 环境的风险吗?有什么副作用(如果有的话)?

我在 Windows 10 上使用 anaconda 2018。

【问题讨论】:

  • 从个人经验来说,我已经删除了pkgs文件夹中的所有文件,没有遇到任何问题。但是,如果您有疑问,请不要理会这些文件。我在这里分享我自己的经验,不能保证如果你这样做不会遇到问题。我正在使用 Windows 10。
  • 只是想指出我还删除了 pkgs 中的所有文件,没有明显问题。这是在运行某种 Debian 的集群上,只使用一个 conda env。它绝对可以释放空间 - 我们有严格的配额限制,它非常有用
  • @Clumsy 猫,我做过很多次。完全没问题。

标签: python anaconda


【解决方案1】:

编辑评论

在查看了in @Robert's answer 指出的文档后,我必须承认我最初的反应过于危言耸听,并且在某些方面明显不正确。对于误导性的回复,我深表歉意。

尽管如此,我确实相信我提出的一些内容对于这个线程仍有一些价值,因此我决定保留修改后的答案。特别是,我认为值得强调的是,删除pkgs 目录实际上可能无法实现 OP 所希望的(以节省空间),并且删除包缓存会破坏 Conda 的冗余最小化策略,因为它无法共享已安装的包。

相反,我的最终建议与@Robert 的建议一致,即使用conda clean -p 删除未使用的包,但保留缓存(pkgs dir),以便将来的环境仍然可以利用硬链接。最后要注意的一点是,某些工具(例如 conda-pack)依赖于包缓存的完整性才能正常工作,因此删除 pkgs 会阻止它们的使用。


修改后的原始回复

不,这绝对不安全,事实上,真正释放磁盘空间的唯一方法是破坏 base 环境。 问题是所有envs 使用到 pkgs 目录的硬链接,因此即使您删除了位于 pkgs 目录中的 link,envs 中的链接仍然存在,因此您不会删除任何物理磁盘上的文件。 你可能做的唯一真正的删除是只有 base 引用的东西,即唯一的副本是在pkgs,因此可能会破坏 base.

更正base 环境仍将包链接到其他位置,因此删除 pkgs 不会影响 base,正如我最初得出的结论。

我强烈建议您查看this other post on estimating the real disk usage of Conda。您可能高估了实际使用了多少空间。对于pkgs 中的大多数文件,只有一个物理副本,因此无需进行任何额外的手动优化。

【讨论】:

  • 天哪。我刚刚删除了 pkgs 文件夹中的所有文件。到目前为止,我仍然可以正常使用 conda python 而不会打嗝。我怀疑这是因为我不使用虚拟环境。我只有 1 个单一的 conda 基础环境。那么,如果我只有一个基本环境,那么删除文件应该没有关系?
  • @user781486 有趣的是看看一切是否仍然有效。也许 base 还有其他我不知道的链接。如果您真的想节省空间,请考虑migrating to Miniconda。在您的情况下,您可能甚至不想导出 YAML,因为听起来您只有 Anaconda。你可以只列出你实际使用的包,然后开始制作新的环境。
  • 我认为即使是基本环境也可以根据您的操作系统将 pkgs 目录中的文件硬链接到适当的位置。因此,您没有遇到任何问题。
  • @user781486 我怀疑您是否节省了任何物理空间,而只是创建了这样做的外观。我仍然坚信,如果您确实节省了空间,您可能会弄坏一些东西。您还可能创建了一种情况,即在创建新环境时,Conda 可能不再能够重用您当前拥有的包。但是您需要运行类似于我建议的测试来验证这一点。
  • @user781486 在查看了this answer 中发布的内容后,我决定编辑我的答案。我认为您将接受的答案更改为该答案而不是我的答案是合适的。幸运的是,我认为我在谨慎方面犯了错误,但我仍然必须承认:我错了,我为误导你而道歉。
【解决方案2】:

实际上,在某些情况下,可以选择删除 pkgs 子目录。正如 Anaconda 社区支持here 所述,“pkgs 目录只是一个缓存。您可以根据需要完全删除它。 但是,在创建新环境时,将缓存中的任何包留在周围会更有效。”

根据documentation,您可以使用conda clean --packages 删除pkgs 中未使用的包(这会将它们移动到pkgs/.trash,然后您可以从中安全地删除它们)。虽然这不会检查使用符号链接安装的包返回包缓存,但如果您不使用此类环境或在 Windows 下工作,这不是主题。我想这就是conda clean --packages 包含在conda clean --all 中的原因。

为了更积极地节省空间,您可以使用conda clean --force-pkgs-dirs 删除所有 可写包缓存(同样需要注意的是可能存在链接到这些目录的环境)。如果您不使用环境或在 Windows 下使用 Anaconda,您可能是安全的。就个人而言,我使用此选项没有问题。

【讨论】:

  • 我在 Windows 下使用 Anaconda。我经常删除 pkgs 文件夹中的所有文件。目前完全没有问题。
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2015-08-06
  • 2014-08-09
  • 2017-11-26
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2019-12-09
相关资源
最近更新 更多