直接删pkgs文件夹会破坏硬链接导致新环境变慢、磁盘占用翻倍;conda clean才是安全有效的正解,它分步清理未引用的解压包目录和无用压缩包,避免误删且保留硬链接复用机制。

直接删 pkgs 文件夹最省事,但会破坏硬链接,新环境变慢、磁盘占用翻倍;用 conda clean 才是安全又有效的正解。
为什么 pkgs 目录越用越大?
每次 conda install 或 conda update,Anaconda 都会在 pkgs 下保留两样东西:.tar.bz2 压缩包(下载完不删),以及解压后的完整包目录(供多个环境硬链接复用)。旧版本包不会自动删除,比如你装过 pytorch-2.0 和 pytorch-2.1,两者都留在 pkgs 里。长期下来,pkgs 占用几十 GB 很常见——尤其是深度学习用户,cudatoolkit 和 pytorch 的 GPU 版本单个就 2–3 GB。
conda clean --packages 和 conda clean --tarballs 到底清什么?
这两个命令分工明确,不能互相替代:
-
conda clean --packages:只删pkgs/下“没被任何环境硬链接引用”的解压后包目录(比如你删了env1,它用的numpy-1.24又没被其他环境用,就删掉) -
conda clean --tarballs:只删pkgs/下所有.tar.bz2文件(这些文件安装完就无用了,删了不影响现有环境) - 常见误区:
conda clean --all看似一劳永逸,但它会同时删--packages、--tarballs和索引缓存;索引缓存删了下次conda search或install会慢几秒,不是错误,但如果你频繁操作,建议分开执行更可控
清理前必须做的三件事
别急着敲命令,先确认现状,避免误删:
- 查当前
pkgs路径:conda config --show pkgs_dirs(可能不止一个路径) - 看空间占比:
du -sh ~/.conda/pkgs/* | sort -hr | head -5(Linux/macOS)或dir /s "C:\Users\XXX\anaconda3\pkgs" | findstr "File(s)"(Windows) - 预览要删什么:
conda clean --dry-run --all—— 它不会真删,但会列出所有待清理项,包括多少 MB 的.tar.bz2、多少个未引用包目录
特别注意:pkgs 下如果有自建 symbolic link 或手动拷贝的目录,conda clean 不会动它们,但直接 rm -rf 就全没了。
清理后新环境变慢?那是你跳过了关键一步
删完 pkgs 后首次创建新环境,如果明显变慢、磁盘占用暴增(比如原来 500MB 的环境现在占 2GB),说明硬链接失效了——因为被删的包恰好是其他环境共用的基础依赖(如 python、openssl)。这不是 bug,是设计使然。补救方法只有两个:
- 立刻运行
conda update --all -n base(更新 base 环境),让最新版基础包重新填回pkgs,后续环境就能再次复用 - 或者,把常用包显式重装一遍:
conda install python=3.11 openssl=3.0.13 -n base,确保它们在pkgs中有活跃引用
真正容易被忽略的点是:清理不是一劳永逸的事。只要你在持续试不同 PyTorch/CUDA 组合、频繁 conda create -n tmp 又删掉,pkgs 就会周期性膨胀。建议把它加入你的开发节奏——比如每月跑一次 conda clean --packages && conda clean --tarballs,比等爆满再抢救强得多。











