# 删了 conda 环境 Mac 空间没回来怎么办

> 列出 conda 环境和各自大小，按名字或路径删掉环境，弄清为什么删完磁盘几乎不变，直到 conda clean 清掉包缓存。

Published: 2026-11-04 | Updated: 2026-11-05

做几个月数据分析，Mac 上就会攒下一堆想不起来是什么时候建的 conda 环境，一门课一个，一篇论文一个，试过一次的工具又一个。每个环境都有自己的一份 Python 和包，加上 conda 的包缓存，加起来常常有几十 GB。删掉它们只要两条命令，但第一条跑完空间往往没怎么回来，原因在 conda 怎么在环境之间共用文件。

这篇讲怎么列出现有环境、按名字或路径删掉一个环境、为什么删完磁盘数字几乎没动，以及怎样用 `conda clean` 把剩下的空间拿回来，Anaconda、Miniconda、Miniforge 和 Mambaforge 都适用。如果是想把 conda 整个卸掉，[在 Mac 上卸载 Python 和 Node](https://mole.fit/zh/blog/how-to-uninstall-python-node-mac) 那篇讲了。

## 列出你的环境

```
conda env list
```

`conda info --envs` 给出的是同一份列表，当前激活的环境前面有个星号，每一行是它的文件夹，一般在 `~/miniconda3/envs/<name>` 或 `~/anaconda3/envs/<name>`。没有名字的那一行是 `base`，conda 自己就装在里面，别动它。

看每个环境占多少：

```
conda info --size
```

它报的是 conda 自己统计的各环境占用，如果你的 conda 版本没有这个参数，就直接量文件夹：

```
du -sh ~/miniconda3/envs/* ~/miniconda3/pkgs
```

把 `miniconda3` 换成 `anaconda3`、`miniforge3` 或 `mambaforge`，和你装的那个对上。

## 删之前先存一份

以后可能还要用的环境，留一个小文件就够了，先激活再导出：

```
conda activate myenv
conda env export --from-history > myenv.yml
```

`--from-history` 只写你当初明确装过的包，换一台 Mac 或者换个新版本 conda 也能重建。想在同一平台上一模一样地还原，就用 `conda list --explicit > myenv-spec.txt`。以后用 `conda create --file myenv.yml` 就能把环境建回来，旧版本用 `conda env create --file myenv.yml`。

## 删掉一个环境

conda 文档写明删除时这个环境不能是激活状态，所以先退出来：

```
conda deactivate
conda remove --name myenv --all
```

`conda env remove --name myenv` 效果一样，加上 `--dry-run` 可以先看会删掉什么，不真删。

用 `--prefix` 建在 `envs` 之外的环境，比如建在某个项目文件夹里的，conda 没有名字可查，要按路径删：

```
conda remove --prefix ~/projects/thesis/.env --all
```

在访达里把环境文件夹移到废纸篓也能释放同样的文件，但用命令更干净，它会顺带更新 conda 自己的环境记录，`conda env list` 和 `conda clean` 都读这份记录。

## 为什么空间没回来

conda 每个包只下载一次，放进安装目录下的包缓存 `pkgs`，再用硬链接把这些文件链进每一个用到它的环境，conda 文档自己的说法是，多亏硬链接，环境本身几乎不占空间。硬链接是同一份磁盘数据的另一个名字，只要还有一个名字在，数据就还在。

删环境删掉的只是它那些名字，`pkgs` 里那份还在，所以对安装目录跑 `du`，数字和之前差不多。缓存里还留着下载下来的 `.conda` 和 `.tar.bz2` 压缩包，以及频道索引文件，包装好以后这些都没有环境再需要。

## 用 conda clean 拿回剩下的

先预览：

```
conda clean --all --dry-run
```

再真正执行：

```
conda clean --all
```

| 参数 | 删掉什么 |
| --- | --- |
| `-i`, `--index-cache` | 下载的频道索引文件，conda 下次会重新获取 |
| `-t`, `--tarballs` | 已经解压进缓存的包压缩文件 |
| `-p`, `--packages` | 没有任何环境链接的已解压包 |
| `-c`, `--tempfiles` | 残留的临时文件 |
| `-l`, `--logfiles` | 日志文件 |
| `-a`, `--all` | 以上全部 |

用 `-p` 之前值得看一眼 conda 文档里的提醒，它只检查 `conda info --envs` 列出来的环境，conda 不知道的环境，比如另一套 conda 建的、或者登记在别的用户名下的，可能会丢掉它还在链接的包。如果你有环境放在不寻常的位置，先跑一次 `conda env list`，确认它们都在列表里。

`--force-pkgs-dirs` 别碰，它会删掉所有可写的包缓存，刻意没放进 `--all`，会弄坏依赖这些文件的环境。

## mamba 和多套安装

mamba 接受同样的命令，`mamba env list`、`mamba remove --name myenv --all`、`mamba clean --all` 都能用。如果装过不止一套，比如几年前的 Anaconda 加上现在的 Miniforge，每套都有自己的 `envs` 和 `pkgs`，要用各自的 `conda` 分别清，或者先在访达里把两个文件夹都看一眼，再判断空间去了哪。shell 里设了 `CONDA_PKGS_DIRS` 和 `CONDA_ENVS_PATH` 的话，这两个文件夹会在别的位置。

## Mole 能帮什么

[Mole](https://mole.fit/zh/) 的「清理」会在你的个人文件夹里找 conda 安装（`~/miniconda3`、`~/anaconda3`、`~/miniforge3`、`~/mambaforge`，以及 `~/opt` 下的两个），只认真正有 `conda-meta` 和 `pkgs` 文件夹的那些。在**开发工具**里它会列出一组 **Conda Cache**，有两类行，一类是 `pkgs` 里已经解压到位、一天内没被动过的包压缩文件，另一类是 `pkgs/cache` 索引文件夹，也就是 `conda clean --index-cache` 会删的那个。每一行都标着**需确认**，默认不勾选。Mole 不碰已解压的包和环境，也不运行 `conda`，你勾选的内容会移到废纸篓，删环境本身还是交给 `conda remove`。其他开发缓存可以看[清理 Mac 上的开发缓存](https://mole.fit/zh/blog/how-to-clear-dev-caches-mac)，Xcode、npm 这些都在里面。

## 常见问题

### 能手动删掉 pkgs 文件夹吗？

不要整个删。环境是硬链接到里面的文件的，conda 也要在那里找自己的记录，用 `conda clean --all`，它只删没有环境需要的部分。

### 删掉环境会删掉我的笔记本和数据吗？

只删环境文件夹里的文件，项目文件夹里的笔记本、脚本和数据都还在，除非你用 `--prefix` 把环境建在项目里面，又把数据放在了同一个文件夹。

### 能删掉 base 环境吗？

不能，conda 自己就在 base 里。想全部清掉就卸载 conda，[卸载 Python 和 Node 那篇](https://mole.fit/zh/blog/how-to-uninstall-python-node-mac)讲了。

### conda clean --all 会让下次安装变慢吗？

会慢一点，conda 要重新下载索引，缓存里没有的包也要再下一次，现有的环境照常能用。

---

Canonical HTML page: https://mole.fit/zh/blog/delete-conda-environments-mac
Blog index for agents: https://mole.fit/zh/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
