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 설치 프로그램 | 세 부분을 제거(아래 참고) |
/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에서 설치한 두 번째 Python은 이것과 함께 쓸 수 있으며, 어느 쪽을 실행할지는 Apple의 Python을 지워서가 아니라 PATH로 정합니다.
python.org에서 설치한 Python 제거하기
같은 문서에 따르면 python.org 설치 프로그램은 Mac에 세 가지를 둡니다. 응용 프로그램 폴더의 IDLE과 Python Launcher가 든 Python 3.x 폴더, /Library/Frameworks/Python.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 앱 제거하는 방법에서 설명합니다.
Homebrew로 설치한 Python 제거하기
Homebrew는 Python formula에 python@3.13처럼 버전을 붙여 이름을 짓습니다. 먼저 무엇이 설치되어 있고 무엇이 그것에 의존하는지 확인합니다.
brew list --formula | grep '^python'
brew uses --installed python@3.13
brew uses가 다른 formula를 출력한다면 그 formula들이 해당 Python을 필요로 하는 것이고, 그것들이 남아 있는 동안 Homebrew는 제거를 거부합니다. 의존하는 formula를 먼저 제거하거나 그 버전은 남겨 두세요. 의존하는 것이 없다면 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이 지워집니다. Homebrew로 pyenv를 설치했다면 마지막에 brew uninstall pyenv를 실행합니다. 무엇이든 지우기 전에 먼저 pyenv root를 실행해 출력되는 경로를 읽어 보세요.
Anaconda나 Miniconda 제거하기
Anaconda의 제거 안내와 짝을 이루는 Miniconda 안내는 macOS에서 같은 세 단계를 씁니다.
- 셸 프로파일에서 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 패키지는 두 패키지를 하나로 묶은 것입니다. 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는 설치 위치를 보여 주며, 파일 목록은 그 위치를 기준으로 한 상대 경로입니다. 두 목록에 나온 것을 제거하는데, 중심은 /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>은 그 버전과 그 버전용으로 설치한 전역 패키지를 함께 제거합니다. 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가 나오는 두 줄을 제거합니다.
셸 시작 파일에서 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는 더 이상 존재하지 않는 인터프리터를 가리키므로 작동하지 않습니다. 삭제한 다음, 남겨 둔 Python으로 프로젝트의 requirements.txt나 lockfile을 이용해 다시 만드세요. 이전 Node 버전용으로 빌드된 네이티브 모듈이 든 node_modules도 마찬가지입니다.
Mole의 역할
Mole은 인터프리터나 버전 관리자를 제거하지 않으니, 그 작업에는 위의 명령을 쓰세요. Mole의 정리 탭은 그 뒤에 캐시를 정리할 때 유용합니다. pip의 macOS 기본 폴더인 ~/Library/Caches/pip는 앱 캐시 및 로그 아래에 별도 행으로, 일부 구성에서 쓰는 XDG 위치인 ~/.cache/pip는 개발자 도구 아래에 pip 캐시 행으로 나옵니다. pip는 필요한 것을 다시 내려받으므로 둘 다 기본으로 선택되어 있습니다. 개발자 도구에는 npm의 _cacache와 _npx 폴더도 나오는데, 다음에 설치할 때 다시 내려받아야 하므로 선택되지 않은 행으로 둡니다. 그 밖에 npm 자체 색인이 더 이상 참조하지 않는 캐시 파일을 모은 더 이상 쓰지 않는 npm 캐시 데이터 그룹(기본 선택), npm 로그, 선택되지 않은 행으로 나오는 Conda의 ~/.conda/pkgs가 있습니다. 선택되지 않은 행은 직접 고를 때까지 그대로 있고, 확인하기 전에는 아무것도 제거되지 않습니다. npm 규칙은 Mole에서 npm cache verify보다 캐시를 적게 지우는 이유에서, 다른 툴체인은 개발자 캐시 비우기에서 다룹니다.
확인하기
새 터미널 윈도우를 열고 다음을 실행합니다.
which -a python3 node
python3 --version
node --version
제거한 사본은 더 이상 나오지 않아야 합니다. 남은 Python이 /usr/bin/python3뿐이라면 그것은 시스템 사본이므로 정상입니다. Node를 모두 제거하려 했다면 node에 대해 "command not found"가 나오는 것이 맞는 결과입니다. 예전 버전이 여전히 실행된다면 셸 파일 중 하나에 PATH 줄이 남아 있거나 다른 설치 프로그램이 다른 곳에 두 번째 사본을 둔 것이니, 첫 단계로 돌아가세요.
자주 묻는 질문
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 줄을 지우세요.