如何在 Mac 上解除安裝 Python 和 Node.js
要在 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 文件寫得很明確:近期的 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。
解除安裝用 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。
解除安裝 pyenv 的版本或 pyenv 本身
pyenv README 說用 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 的解除安裝指南和對應的 Miniconda 指南在 macOS 上用的是同樣的三個步驟:
- 從 shell 設定檔移除 conda 的初始化:先執行
conda activate,再執行conda init --reverse --all。 - 刪除安裝檔案夾。Anaconda 提到,依安裝方式不同,它可能在你的個人專屬檔案夾或
/opt裡;conda info --base會印出實際位置。常見路徑是~/anaconda3、~/miniconda3、/opt/anaconda3或/opt/miniconda3,/opt底下的需要sudo。 - 視需要移除隱藏的設定和資料檔
~/.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(安裝程式原始碼)。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 說先執行 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 說移除 fnm 就是刪除它的檔案夾,並從 shell 設定中移除對 fnm 的引用,例如 eval "$(fnm env ...)" 這一行。它在 macOS 上的預設資料檔案夾是 ~/Library/Application Support/fnm,較舊的安裝則用 ~/.fnm。用 Homebrew 安裝的 fnm 還需要執行 brew uninstall fnm。
Volta: 依 Volta 文件,移除 ~/.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 的快取文件列出了 macOS 的預設位置和 pip cache purge。npm 的快取文件提到,還在使用 npm 時通常不需要清除快取,因為它會自我修復;等 Node 移除之後,那個檔案夾就只是一堆資料。
專案的虛擬環境是另一回事。用已移除的 Python 建立的 .venv,指向的直譯器已經不存在,就會無法使用。刪掉它,再依專案的 requirements.txt 或 lockfile,用你保留的 Python 重新建立。針對舊版 Node 編譯過原生模組的 node_modules 也是一樣。
Mole 能做什麼
Mole 不會解除安裝直譯器或版本管理工具,這部分請用上面的指令。之後清快取時,它的清理分頁就派得上用場。pip 在 macOS 上的預設檔案夾 ~/Library/Caches/pip 會在 App 快取與記錄底下單獨列成一列,~/.cache/pip(某些設定使用的 XDG 位置)則在開發工具底下列為一列 pip 快取;兩者都預設勾選,因為 pip 會重新下載它需要的東西。開發工具也會列出 npm 的 _cacache 和 _npx 檔案夾,這兩列預設不勾選,因為下一次安裝還會再下載它們;另外還有一個預設勾選的 npm 快取中不再使用的資料群組,對應 npm 自己的索引已經不再參照的快取檔案,以及 npm 記錄檔,和預設不勾選的 Conda ~/.conda/pkgs 一列。未勾選的列會一直保持未勾選,直到你自己選取,而且在你確認之前不會移除任何東西。npm 的規則見npm 快取越用越大,Mole 這次只清沒有索引參照的資料,其他工具鏈見清除開發者快取而不破壞建置。
驗證
打開新的終端機視窗並執行:
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 設定行。