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の開発ツールのものです。
そのあと、これらのツールがシェルの起動ファイルに足した行と、ホームフォルダに残したキャッシュを片付けます。このガイドは、特定する、取り除く、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 はエイリアスとシェル関数も表示します。これはバージョンマネージャで効いてきます。たとえばnvmは nvm をシェル関数として定義し、pyenvや一部の構成は本物のバイナリの前にshimを置きます。シンボリックリンクは ls -l でたどり、実際の行き先を確かめます。
表示されたパスを次の表と照らし合わせます。
| パスの先頭 | 入れたもの | 消し方 |
|---|---|---|
/usr/bin/python3 |
XcodeとCommand Line Tools向けのmacOS | 触らない |
/Library/Frameworks/Python.framework、またはそこを指す /usr/local/bin のリンク |
python.orgのインストーラ | 3つの部分を取り除く(後述) |
/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は消さない
macOS向けのPythonドキュメントははっきり書いています。最近のmacOSには /usr/bin/python3 に python3 コマンドが含まれ、これはAppleの開発ツールが提供し、そのために使うPythonにリンクしています。Appleが管理し、Apple製やサードパーティ製のソフトウェアが使っているので、変更したり削除しようとしたりしてはいけません。そもそも封印されたシステムボリュームの上にあります。python.orgやHomebrewの2つ目のPythonはこれと共存できます。どちらを動かすかはPATHで切り替えるもので、Appleのものを消して切り替えるものではありません。
python.orgから入れたPythonをアンインストールする
同じドキュメントによると、python.orgのインストーラはMacに3つのものを置きます。IDLEとPython Launcherが入ったアプリケーションフォルダ内の Python 3.x フォルダ、/Library/Frameworks/Python.framework にあるフレームワーク、/usr/local/bin にある実行ファイルへのシンボリックリンクです。ドキュメントには、Pythonをアンインストールするにはこの3つを取り除けばよいとあります。
バージョンは1つずつ取り除きます。たとえば3.12なら次のようにします。
ls /Library/Frameworks/Python.framework/Versions
ls -l /usr/local/bin | grep 'Python.framework/Versions/3.12'
1つ目のコマンドはインストール済みのバージョンを一覧にし、2つ目は /usr/local/bin のどのリンクが消そうとしているバージョンを指しているかを表示します。そのうえで /Applications/Python 3.12 をゴミ箱に入れ、管理者権限で /Library/Frameworks/Python.framework/Versions/3.12 を削除し、2つ目のコマンドが表示したリンクだけを削除します。最後のバージョンを取り除くなら、Python.framework フォルダごと消して構いません。
インストーラはレシートも残します。pkgutil --pkgs | grep -i python で見つかります。レシート自体が何かを動かすことはありませんが、pkgutil --files <id> でそのパッケージが書き込んだものが正確にわかり、これがいちばん確かなパスの一覧です。レシートの読み方と消し方は.pkgアプリをアンインストールする方法で説明しています。
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によると、シェルの起動ファイルからpyenvの設定行をすべて消し、rm -rf $(pyenv root) でルートディレクトリを削除します。これでその下に入っているすべてのPythonが消えます。pyenvをHomebrewで入れたなら、最後に brew uninstall pyenv を実行します。何かを削除する前に、まず pyenv root を実行し、表示されたパスを読んでください。
AnacondaまたはMinicondaをアンインストールする
Anacondaのアンインストールガイドと、対応するMinicondaのガイドは、macOSで同じ3つの手順を示しています。
- シェルのプロファイルからcondaの初期化を取り除きます。
conda activateを実行し、続けてconda init --reverse --allを実行します。 - インストールフォルダを削除します。Anacondaによると、インストールのしかたによってホームフォルダか
/optにあり、実際の場所はconda info --baseで表示されます。よくあるパスは~/anaconda3、~/miniconda3、/opt/anaconda3、/opt/miniconda3で、/optのものにはsudoが必要です。 - 必要なら、隠し設定ファイルとデータファイルの
~/.condarc、~/.conda、~/.continuumも削除します。独自の設定があって再インストールするつもりなら、.condarcは残しておくようAnacondaは勧めています。
ガイドは、rm -rf は確認なしに削除し、取り消せないと警告しています。Returnを押す前にパスを確かめてください。自分で作った環境はインストールフォルダの中か ~/.conda の下にあるので、必要なものは先に conda env export -n <name> > env.yml で書き出しておきます。
nodejs.orgから入れたNode.jsをアンインストールする
公式のmacOS向けパッケージは、1つの中に2つのパッケージが入っています。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 から /usr/local/bin へ npx のリンクも張ります。
何かを取り除く前に、パッケージが書き込んだものを一覧にします。
pkgutil --pkgs | grep -i nodejs
pkgutil --pkg-info org.nodejs.node.pkg
pkgutil --files org.nodejs.node.pkg | head -50
--pkg-info はインストール先を表示し、ファイルの一覧はそこからの相対パスです。2つの一覧に出てくるものを取り除きます。中心は /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、または node@20 のようなバージョン付きのformulaを指定します。brew uses --installed node で、それに依存しているものがわかります。
nvm: nvm ls でインストール済みのバージョンを一覧にし、nvm uninstall <version> で1つを、そのバージョン向けに入れたグローバルパッケージごと取り除きます。nvm自体を取り除くには、nvmのREADMEによると、nvm unload を実行し、ディレクトリ($NVM_DIR、既定では ~/.nvm)を削除し、シェルの設定から NVM_DIR のexportと、nvm.sh と bash_completion を読み込む行を消します。nvmはHomebrewでのインストールをサポートしていないので、Homebrewから入ったnvmは brew uninstall nvm で取り除きます。
fnm: バージョンは fnm list と fnm uninstall <version> で管理します。fnmのREADMEによると、fnmを取り除くとは、そのフォルダを削除し、eval "$(fnm env ...)" の行などシェルの設定にあるfnmへの参照を消すことです。macOSでの既定のデータフォルダは ~/Library/Application Support/fnm で、古いインストールでは ~/.fnm でした。Homebrewで入れたfnmなら brew uninstall fnm も必要です。
Volta: Voltaのドキュメントのとおり、~/.volta ディレクトリと、シェルのプロファイルでVoltaに触れている2行を削除します。
シェルの起動ファイルから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の2行です。見覚えのない行は、何をするものかわかるまで残しておきます。そのあと新しいターミナルウインドウを開いてください。開いたままのウインドウは古い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のcacheのドキュメントは、npmを使っている間はキャッシュが自己修復するので、消す必要はたいていないとしています。Nodeを取り除いたあとなら、そのフォルダはただのデータです。
プロジェクトの仮想環境は別の話です。取り除いたPythonで作った .venv は、もう存在しないインタプリタを指していて動かなくなります。プロジェクトの requirements.txt やロックファイルから、残したPythonで作り直してください。古いバージョンのNode向けにビルドされたネイティブモジュールを含む node_modules も同じです。
Moleの使いどころ
Moleはインタプリタもバージョンマネージャもアンインストールしません。それには上のコマンドを使います。Moleの クリーン タブが役に立つのは、そのあとのキャッシュです。pipのmacOSでの既定のフォルダ ~/Library/Caches/pip は アプリのキャッシュとログ の下に専用の行として、~/.cache/pip(一部の構成が使うXDGの場所)は 開発ツール の下にpipキャッシュの行として表示されます。pipは必要なものをまたダウンロードするので、どちらも既定で選択されています。開発ツール にはほかに、次のインストールでまたダウンロードされるためチェックが外れた行として表示されるnpmの _cacache と _npx フォルダ、npm自身のインデックスがもう参照していないキャッシュファイルをまとめた既定で選択済みの npmキャッシュ内の不要になったデータ グループ、npmのログ、チェックが外れた行としてのCondaの ~/.conda/pkgs が並びます。チェックが外れた行は自分で選ぶまでそのままで、確定する前に何かが削除されることはありません。npmについての判断基準はMoleがnpm cache verifyより少ないnpmキャッシュしか消さない理由で、ほかのツールチェーンは開発用キャッシュの消し方で扱っています。
確認する
新しいターミナルウインドウを開き、次を実行します。
which -a python3 node
python3 --version
node --version
取り除いたコピーはもう表示されないはずです。残ったPythonが /usr/bin/python3 だけなら、それはシステムのコピーで、想定どおりです。Nodeをすべて取り除くつもりだったなら、node が「command not found」になるのが正しい結果です。古いバージョンがまだ動くなら、そのPATHの行がシェルのファイルのどれかに残っているか、別のインストーラが2つ目のコピーをほかの場所に置いています。最初の手順に戻ってください。
よくある質問
MacでPythonをアンインストールするには?
which -a python3 を実行してどのコピーがあるかを確認し、入れたときの方法で取り除きます。Homebrewなら brew uninstall python@3.x、pyenvなら pyenv uninstall、python.orgなら、アプリケーションフォルダ内のフォルダ、フレームワークのバージョン、/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の行を消してください。