我运行此命令来释放 anaconda 上的磁盘空间
$ conda clean --all
但是,anaconda python 中的
pkgs
文件夹中仍然存在一些大文件。
手动删除
pkgs
文件夹中的所有文件是否安全?有破坏我的 anaconda 环境的风险吗?如果有的话,有哪些副作用?
我在 Windows 10 上使用 anaconda 2018。
实际上,在某些情况下,可以选择删除
pkgs
子目录。正如 Anaconda 社区支持的here所述“pkgs
目录只是一个缓存。您可以根据需要将其完全删除。
但是,在创建新环境时,保留缓存中的任何包会更有效。”
根据文档,您可以使用
conda clean --packages
删除pkgs
中未使用的软件包(这会将它们移动到pkgs/.trash
,然后您可以从中安全地删除它们)。虽然这不会检查使用符号链接安装回包缓存的包,但如果您不使用此类环境或在 Windows 下工作,这不是一个主题。我想这就是为什么 conda clean --packages
包含在 conda clean --all
中。
为了更积极地节省空间,您可以使用
conda clean --force-pkgs-dirs
删除 all 可写包缓存(同样需要注意的是,可能存在链接到这些目录的环境)。如果您不使用环境或在 Windows 下使用 Anaconda,那么您可能是安全的。就我个人而言,我使用此选项没有任何问题。
在查看了@Robert 的回答中指出的文档后,我必须承认我最初的回答过于危言耸听,而且在某些方面是公然错误的。对于误导性的回复,我深表歉意。
尽管如此,我确实相信我提出的一些内容对于该主题仍然有一些优点,因此我决定保留答案并进行修改。特别是,我认为值得强调的是,删除pkgs
目录实际上可能无法实现 OP 所希望的(节省空间),并且删除包缓存会破坏 Conda 的冗余最小化策略,因为无法共享已安装的内容包裹。相反,我的最终建议与@Robert的建议一致,即使用
conda clean -p
删除未使用的包,但保留缓存(
pkgs
目录),以便将来的环境仍然可以利用硬链接。最后一点需要注意的是,某些工具(例如
conda-pack
)依赖于包缓存的完整性才能正常工作,因此删除
pkgs
将阻止它们的使用。
不,这绝对不安全,事实上,真正释放磁盘空间的唯一方法是破坏你的base环境。问题是所有环境都使用到pkgs
目录的硬链接,所以即使如果删除位于
pkgs
目录中的 link,envs 中的链接仍然存在,因此您不会删除磁盘上的任何物理文件。您可能做的唯一真正的删除是仅由
pkgs
中,因此有可能破坏base。
我强烈建议您查看更正:base env 仍然将包链接到其他位置,因此删除
pkgs
不会影响base,正如我最初得出的结论。
另一篇关于估计 Conda 实际磁盘使用情况的文章。您可能高估了实际使用的空间量。对于 pkgs
中的大多数文件,只有一个物理 副本,因此无需进行任何额外的手动优化。