在anaconda python中手动删除pkgs文件夹中的所有文件是否安全?

问题描述 投票:0回答:2

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

$ conda clean --all

但是,anaconda python 中的

pkgs
文件夹中仍然存在一些大文件。

手动删除

pkgs
文件夹中的所有文件是否安全?有破坏我的 anaconda 环境的风险吗?如果有的话,有哪些副作用?

我在 Windows 10 上使用 anaconda 2018。

python anaconda
2个回答
56
投票

实际上,在某些情况下,可以选择删除

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,那么您可能是安全的。就我个人而言,我使用此选项没有任何问题。


8
投票

编辑评论

在查看了@Robert 的回答中指出的文档后,我必须承认我最初的回答过于危言耸听,而且在某些方面是公然错误的。对于误导性的回复,我深表歉意。

尽管如此,我确实相信我提出的一些内容对于该主题仍然有一些优点,因此我决定保留答案并进行修改。特别是,我认为值得强调的是,删除

pkgs

 目录实际上可能无法实现 OP 所希望的(节省空间),并且删除包缓存会破坏 Conda 的冗余最小化策略,因为无法共享已安装的内容包裹。

相反,我的最终建议与@Robert的建议一致,即使用

conda clean -p

删除未使用的包,但保留缓存(
pkgs
目录),以便将来的环境仍然可以利用硬链接。最后一点需要注意的是,某些工具(例如 
conda-pack
)依赖于包缓存的完整性才能正常工作,因此删除 
pkgs
 将阻止它们的使用。


修改原始回复

不,这绝对不安全,事实上,真正释放磁盘空间的唯一方法是破坏你的base环境。问题是所有环境都使用到pkgs

目录的硬链接,所以即使如果删除位于 
pkgs 目录中的 link
,envs 中的链接仍然存在,因此您不会删除磁盘上的任何物理文件。 
您可能做的唯一真正的删除是仅由 base 引用的内容,即唯一的副本位于 pkgs
 中,因此有可能破坏 
base

更正base env 仍然将包链接到其他位置,因此删除 pkgs

 不会影响 
base,正如我最初得出的结论。

我强烈建议您查看

另一篇关于估计 Conda 实际磁盘使用情况的文章。您可能高估了实际使用的空间量。对于 pkgs

 中的大多数文件,只有一个 
物理 副本,因此无需进行任何额外的手动优化。

© www.soinside.com 2019 - 2024. All rights reserved.