# 如何在 Mac 上解除安裝 Python 和 Node.js

> 找出 PATH 上是哪一份 Python 或 Node，照支援的方式移除 Homebrew、pyenv、conda、nvm 或安裝程式裝的版本，再清理 PATH 設定和快取。

Published: 2026-10-06 | Updated: 2026-10-17

要在 Mac 上解除安裝 Python 或 Node.js，先弄清楚你要移除的是哪一份，因為通常不只一份，每一份的移除方式也不同。執行 `which -a python3` 或 `which -a node`，看看 PATH 上的每一份，然後透過當初安裝它的工具移除：Homebrew 用 `brew uninstall`，pyenv 用 `pyenv uninstall`，nvm 用 `nvm uninstall`，conda 照 Anaconda 文件裡的步驟，python.org 或 nodejs.org 的安裝程式則是移除它們的套件寫入的檔案。`/usr/bin/python3` 不要動，它屬於 macOS 和 Apple 的開發者工具。

接著清掉這些工具加進 shell 啟動檔的那幾行，以及它們留在個人專屬檔案夾裡的快取。這篇指南就照這個順序走：辨認、移除、清理 PATH、清除快取、驗證。

## 找出 PATH 上的每一份 Python 和 Node

這些指令只讀取資訊：

```
which -a python3 python node npm
type -a python3 node
python3 -c 'import sys; print(sys.executable)'
```

`which -a` 會依 PATH 順序列出每一個符合的結果，第一行就是你輸入指令時實際執行的那一個。`type -a` 還會顯示別名和 shell 函式，這對版本管理工具很重要：例如 nvm 會把 `nvm` 定義成 shell 函式，pyenv 和某些設定則會在真正的執行檔前面放 shim。遇到符號連結，用 `ls -l` 追下去，看它實際指向哪裡。

拿這些路徑對照下表：

| 路徑開頭 | 安裝者 | 怎麼移除 |
| --- | --- | --- |
| `/usr/bin/python3` | macOS，供 Xcode 和 Command Line Tools 使用 | 不要動 |
| `/Library/Frameworks/Python.framework`，或 `/usr/local/bin` 裡指向它的連結 | python.org 安裝程式 | 移除它的三個部分（見下文） |
| `/opt/homebrew`（Apple 晶片）或 `/usr/local/Cellar`、`/usr/local/opt`（Intel） | Homebrew | `brew uninstall` |
| `~/.pyenv/shims` 或 `~/.pyenv/versions` | pyenv | `pyenv uninstall` |
| `~/anaconda3`、`~/miniconda3`、`/opt/anaconda3`、`/opt/miniconda3` | Anaconda 或 Miniconda | `conda init --reverse`，再移除檔案夾 |
| 不是 Homebrew 連結的 `/usr/local/bin/node` | nodejs.org 安裝程式 | 移除它的檔案，再清除它的安裝收據 |
| `~/.nvm/versions/node` | nvm | `nvm uninstall` |
| `~/Library/Application Support/fnm` 或 `~/.fnm` | fnm | `fnm uninstall`，再移除檔案夾 |
| `~/.volta` | Volta | 移除 `~/.volta` |

在 Intel Mac 上，Homebrew 和 nodejs.org、python.org 的安裝程式都會寫入 `/usr/local`，所以在認定那裡的某個檔案可以由你刪除之前，先用 `ls -l` 檢查它是不是指向 Homebrew Cellar 的連結。

## 不要移除 macOS 內建的 Python

[Python 的 macOS 文件](https://docs.python.org/3/using/mac.html)寫得很明確：近期的 macOS 在 `/usr/bin/python3` 內含一個 `python3` 指令，它連結到由 Apple 開發者工具提供、也供其使用的 Python 版本，你絕對不該修改或嘗試刪除它，因為它由 Apple 控制，Apple 提供的軟體和第三方軟體都會用到它。何況它就在密封的系統卷宗上。來自 python.org 或 Homebrew 的第二份 Python 可以和它並存；要改的是 PATH 決定哪一個先執行，而不是刪除 Apple 的那一份。

## 解除安裝從 python.org 安裝的 Python

根據同一份文件，python.org 的安裝程式會在 Mac 上放三樣東西：「應用程式」裡一個含有 IDLE 和 Python Launcher 的 `Python 3.x` 檔案夾、位於 `/Library/Frameworks/Python.framework` 的 framework，以及 `/usr/local/bin` 裡指向執行檔的符號連結。文件說，要解除安裝 Python，移除這三樣東西即可。

一次移除一個版本。以 3.12 為例：

```
ls /Library/Frameworks/Python.framework/Versions
ls -l /usr/local/bin | grep 'Python.framework/Versions/3.12'
```

第一行列出已安裝的版本；第二行顯示 `/usr/local/bin` 裡有哪些連結指向你要移除的版本。接著把 `/Applications/Python 3.12` 移到垃圾桶，用管理者權限刪除 `/Library/Frameworks/Python.framework/Versions/3.12`，再只刪除第二行指令列出的那些連結。如果移除的是最後一個版本，整個 `Python.framework` 檔案夾都可以刪掉。

安裝程式也會留下一份安裝收據，可以用 `pkgutil --pkgs | grep -i python` 找到。收據本身不會執行，但 `pkgutil --files <id>` 會列出那個套件實際寫入的內容，這是最可靠的路徑清單。讀取和清除收據的方法見[解除安裝用 .pkg 套件安裝的 Mac App](https://mole.fit/tw/blog/how-to-uninstall-pkg-apps-mac)。

## 解除安裝用 Homebrew 安裝的 Python

Homebrew 依版本替 Python formula 命名，例如 `python@3.13`。先檢查裝了什麼，以及有什麼依賴它：

```
brew list --formula | grep '^python'
brew uses --installed python@3.13
```

如果 `brew uses` 列出了其他 formula，它們就需要這個 Python，只要它們還在，Homebrew 就會拒絕解除安裝。先移除這些依賴者，或保留那個版本。沒有東西依賴它時，`brew uninstall python@3.13` 就能移除它，`brew autoremove` 則會清掉其他東西都不再需要的依賴項目。移除 Homebrew 本身是另一件大得多的工作，見[用官方腳本解除安裝 Homebrew](https://mole.fit/tw/blog/how-to-uninstall-homebrew-mac)。

## 解除安裝 pyenv 的版本或 pyenv 本身

[pyenv README](https://github.com/pyenv/pyenv) 說用 `pyenv uninstall <version>` 移除舊版本，`pyenv prefix <version>` 則會顯示某個版本的目錄。外掛在解除安裝時可能會多做一些事，例如 pyenv-virtualenv 也會移除連結到該版本的虛擬環境。

```
pyenv versions
pyenv uninstall 3.11.9
```

要完全移除 pyenv，README 說要先從 shell 啟動檔中移除所有 pyenv 設定行，再用 `rm -rf $(pyenv root)` 移除它的根目錄，這會刪掉安裝在底下的每一份 Python。如果你是用 Homebrew 安裝 pyenv，最後再執行 `brew uninstall pyenv`。刪除任何東西之前，先執行 `pyenv root`，看清楚它印出的路徑。

## 解除安裝 Anaconda 或 Miniconda

Anaconda 的[解除安裝指南](https://www.anaconda.com/docs/getting-started/anaconda/uninstall)和對應的 [Miniconda 指南](https://www.anaconda.com/docs/getting-started/miniconda/uninstall)在 macOS 上用的是同樣的三個步驟：

1. 從 shell 設定檔移除 conda 的初始化：先執行 `conda activate`，再執行 `conda init --reverse --all`。
2. 刪除安裝檔案夾。Anaconda 提到，依安裝方式不同，它可能在你的個人專屬檔案夾或 `/opt` 裡；`conda info --base` 會印出實際位置。常見路徑是 `~/anaconda3`、`~/miniconda3`、`/opt/anaconda3` 或 `/opt/miniconda3`，`/opt` 底下的需要 `sudo`。
3. 視需要移除隱藏的設定和資料檔 `~/.condarc`、`~/.conda` 和 `~/.continuum`。如果你有自訂設定並打算重新安裝，Anaconda 建議保留 `.condarc`。

指南提醒，`rm -rf` 刪除時不會確認，也無法復原，所以按下 Return 之前先檢查路徑。你建立的環境放在安裝檔案夾裡或 `~/.conda` 底下，需要的環境先用 `conda env export -n <name> > env.yml` 匯出。

## 解除安裝從 nodejs.org 安裝的 Node.js

官方的 macOS 安裝套件其實是兩個套件合在一起。Node 自己的安裝程式定義把它們登記為 `org.nodejs.node.pkg` 和 `org.nodejs.npm.pkg`，結束畫面也說它把 `node` 安裝到 `/usr/local/bin/node`、把 `npm` 安裝到 `/usr/local/bin/npm`（[安裝程式原始碼](https://github.com/nodejs/node/tree/main/tools/macos-installer)）。npm 套件也會從 `/usr/local/lib/node_modules/npm` 把 `npx` 連結到 `/usr/local/bin`。

移除任何東西之前，先列出這些套件寫入了什麼：

```
pkgutil --pkgs | grep -i nodejs
pkgutil --pkg-info org.nodejs.node.pkg
pkgutil --files org.nodejs.node.pkg | head -50
```

`--pkg-info` 會顯示安裝位置，檔案清單則是相對於這個位置。移除兩份清單列出的內容，重點是 `/usr/local/bin/node`、`npm` 和 `npx`，以及 `/usr/local/lib/node_modules/npm` 檔案夾。刪除整個 `/usr/local/lib/node_modules` 之前先看看裡面，你用 `npm install -g` 安裝的全域套件也放在那裡。接著執行 `sudo pkgutil --forget org.nodejs.node.pkg`，再對 `org.nodejs.npm.pkg` 做一次，這只會清除安裝收據。

## 解除安裝來自 Homebrew、nvm、fnm 或 Volta 的 Node

**Homebrew：** `brew uninstall node`，或帶版本的 formula，例如 `node@20`。`brew uses --installed node` 會顯示依賴它的任何東西。

**nvm：** `nvm ls` 列出已安裝的版本，`nvm uninstall <version>` 移除其中一個，連同替它安裝的全域套件。要移除 nvm 本身，[nvm README](https://github.com/nvm-sh/nvm) 說先執行 `nvm unload`，刪除它的目錄（`$NVM_DIR`，預設是 `~/.nvm`），再從 shell 設定檔移除 `NVM_DIR` 的 export，以及載入 `nvm.sh` 和 `bash_completion` 的那幾行。nvm 不支援用 Homebrew 安裝，所以來自 Homebrew 的 nvm 應該用 `brew uninstall nvm` 移除。

**fnm：** 用 `fnm list` 和 `fnm uninstall <version>` 管理版本。[fnm README](https://github.com/Schniz/fnm) 說移除 fnm 就是刪除它的檔案夾，並從 shell 設定中移除對 fnm 的引用，例如 `eval "$(fnm env ...)"` 這一行。它在 macOS 上的預設資料檔案夾是 `~/Library/Application Support/fnm`，較舊的安裝則用 `~/.fnm`。用 Homebrew 安裝的 fnm 還需要執行 `brew uninstall fnm`。

**Volta：** 依 [Volta 文件](https://docs.volta.sh/advanced/uninstall)，移除 `~/.volta` 目錄，以及 shell 設定檔裡提到 Volta 的那兩行。

## 清理 shell 啟動檔裡的 PATH 設定

安裝程式和版本管理工具會在這些檔案裡加上幾行，軟體移除後，這些行還是會留著：

```
grep -n -E 'python|Python.framework|pyenv|conda|nvm|fnm|volta|node' ~/.zshrc ~/.zprofile ~/.bash_profile ~/.bashrc ~/.profile 2>/dev/null
```

輸出會列出每個符合項目所在的檔案和行號。用文字編輯器打開檔案，刪掉屬於你已移除工具的那幾行：指向 `Python.framework` 的 `export PATH=...`、`pyenv init` 那幾行、`conda init --reverse` 無法執行時留下的 `>>> conda initialize >>>` 區塊、nvm 和 fnm 的設定行，以及 Volta 的兩行。認不出來的行先留著，等弄清楚它的作用再說。之後打開一個新的終端機視窗；已經開著的視窗會沿用舊的 PATH，`hash -r` 則能清掉目前視窗裡 zsh 記住的指令位置。

## 留下的快取和資料

解除安裝直譯器並不會清掉它的套件快取：

| 快取 | 位置 | 如何清除 |
| --- | --- | --- |
| pip | macOS 預設為 `~/Library/Caches/pip`；`pip cache dir` 會顯示實際使用的位置 | 在移除最後一個 pip 之前執行 `pip cache purge`，或刪除該檔案夾 |
| npm | `~/.npm`，套件在 `~/.npm/_cacache` | `npm cache clean --force`，或在 Node 移除後刪除該檔案夾 |
| conda 套件 | 安裝檔案夾裡的 `pkgs`，或 `~/.conda/pkgs` | 隨安裝檔案夾一起移除；`~/.conda` 可選擇是否刪除 |

[pip 的快取文件](https://pip.pypa.io/en/stable/topics/caching/)列出了 macOS 的預設位置和 `pip cache purge`。[npm 的快取文件](https://docs.npmjs.com/cli/v10/commands/npm-cache)提到，還在使用 npm 時通常不需要清除快取，因為它會自我修復；等 Node 移除之後，那個檔案夾就只是一堆資料。

專案的虛擬環境是另一回事。用已移除的 Python 建立的 `.venv`，指向的直譯器已經不存在，就會無法使用。刪掉它，再依專案的 `requirements.txt` 或 lockfile，用你保留的 Python 重新建立。針對舊版 Node 編譯過原生模組的 `node_modules` 也是一樣。

## Mole 能做什麼

[Mole](https://mole.fit/tw/) 不會解除安裝直譯器或版本管理工具，這部分請用上面的指令。之後清快取時，它的**清理**分頁就派得上用場。pip 在 macOS 上的預設檔案夾 `~/Library/Caches/pip` 會在 **App 快取與記錄**底下單獨列成一列，`~/.cache/pip`（某些設定使用的 XDG 位置）則在**開發工具**底下列為一列 pip 快取；兩者都預設勾選，因為 pip 會重新下載它需要的東西。**開發工具**也會列出 npm 的 `_cacache` 和 `_npx` 檔案夾，這兩列預設不勾選，因為下一次安裝還會再下載它們；另外還有一個預設勾選的 **npm 快取中不再使用的資料**群組，對應 npm 自己的索引已經不再參照的快取檔案，以及 npm 記錄檔，和預設不勾選的 Conda `~/.conda/pkgs` 一列。未勾選的列會一直保持未勾選，直到你自己選取，而且在你確認之前不會移除任何東西。npm 的規則見[npm 快取越用越大，Mole 這次只清沒有索引參照的資料](https://mole.fit/tw/blog/mole-developer-cache-gc)，其他工具鏈見[清除開發者快取而不破壞建置](https://mole.fit/tw/blog/how-to-clear-dev-caches-mac)。

## 驗證

打開新的終端機視窗並執行：

```
which -a python3 node
python3 --version
node --version
```

你移除的那一份不應該再出現。如果只剩下 `/usr/bin/python3` 這一份 Python，那是系統內建的，屬於預期結果。如果你本來就打算移除所有 Node，`node` 顯示「command not found」就是正確的答案。如果舊版本還是會執行，代表它的 PATH 設定還留在某個 shell 檔案裡，或另一個安裝程式在別處放了第二份；回到第一步重新檢查。

## 常見問題

### 如何在 Mac 上解除安裝 Python？

執行 `which -a python3` 看看你有哪一份，然後依當初的安裝方式移除：Homebrew 用 `brew uninstall python@3.x`，pyenv 用 `pyenv uninstall`，python.org 則移除「應用程式」裡的檔案夾、framework 版本和 `/usr/local/bin` 的連結。不要刪除屬於 macOS 的 `/usr/bin/python3`。

### 如何在 Mac 上解除安裝 Node.js？

Homebrew 用 `brew uninstall node`，nvm 用 `nvm uninstall <version>`；nodejs.org 安裝程式則移除 `/usr/local/bin/node`、`npm`、`npx` 和 `/usr/local/lib/node_modules` 底下的 npm 檔案夾，再清除 `org.nodejs.node.pkg` 和 `org.nodejs.npm.pkg` 的安裝收據。

### 如何在 Mac 上完全解除安裝 Anaconda？

執行 `conda activate` 和 `conda init --reverse --all`，刪除 `conda info --base` 回報的安裝檔案夾，例如 `~/anaconda3` 或 `/opt/anaconda3`，再視需要移除 `~/.condarc`、`~/.conda` 和 `~/.continuum`。

### 可以刪除 macOS 內建的 Python 嗎？

不行。Python 文件說 `/usr/bin/python3` 由 Apple 控制，Apple 和第三方軟體都會用到它，絕對不該修改或刪除。在它旁邊另外安裝一份 Python，再透過 PATH 決定執行哪一份。

### 為什麼解除安裝 Python 之後，python3 還是能執行？

要不是 PATH 上還有另一份，通常是 macOS 的 `/usr/bin/python3`，就是你的終端機還在用舊的 PATH。打開新視窗，執行 `which -a python3`，再從 `~/.zshrc` 或 `~/.zprofile` 移除殘留的 PATH 設定行。

---

Canonical HTML page: https://mole.fit/tw/blog/how-to-uninstall-python-node-mac
Blog index for agents: https://mole.fit/tw/blog/llms.txt
Site index for agents: https://mole.fit/llms.txt
