250828
시작: 작은 혼란과 한 번의 실수
모든 것은 uv라는 새로운 파이썬 도구를 사용해보려던 시도에서 시작됐다. uv venv와 uv init, 두 가지 워크플로우 앞에서 나는 혼란스러웠고, 기존에 쓰던 방식을 정리하기로 했다.
그리고 바로 그때, 나는 실수를 저질렀다.
가상 환경을
deactivate하지 않은 채,rm -rf .venv명령어로 폴더를 통째로 삭제해버렸다.
터미널 프롬프트에는 여전히 (.venv)가 떠 있었다. 하지만 실제 폴더는 사라진 뒤였다. 이 작은 실수가 나를 터미널과 가상 환경의 가장 깊은 곳에 있는 핵심 원리로 이끌었다. 이 글은 그 탐험의 기록이다.
의문: 유령이 되어버린 가상 환경
폴더는 삭제됐는데, 내 터미널은 왜 아직도 가상 환경이 활성화된 척하고 있었을까? 더 신기한 건, 터미널을 껐다 켜니 모든 게 정상으로 돌아왔다는 점이다. 이 현상은 몇 가지 근본적인 질문을 던졌다.
activate명령어의 진짜 정체는 무엇인가?deactivate를 하지 않아도 괜찮았던 이유는?터미널을 껐다 켜는 것만으로 어떻게 모든 것이 리셋되는가?
이 질문들에 대한 답을 찾아가는 과정은 다음과 같았다.
탐구 1: 터미널 세션과 PATH 환경 변수
새로운 터미널 창을 열면, 셸(Shell, 예: Zsh)은 .zshrc 같은 설정 파일을 읽어 초기 환경을 구성한다. 여기서 가장 중요한 열쇠는 PATH 환경 변수였다.
PATH란?: 셸이python이나ls같은 명령어의 실행 파일을 어디서 찾아야 할지 알려주는 경로 목록이다.동작 방식:
PATH에는 여러 경로가 콜론(:)으로 구분되어 저장되어 있다. 셸은 이 경로들을 순서대로 탐색하며 명령어를 찾는다.
가장 중요한 사실은, 이 PATH 변수가 현재 터미널 세션(정확히는 셸 프로세스)의 메모리에만 저장되는 임시 정보라는 점이다.
탐구 2: activate와 deactivate의 본질
의문의 핵심이었던 activate의 본질은 생각보다 간단했다.
activate의 본질: PATH 조작
source .venv/bin/activate 명령어는 단 두 가지 일을 한다.
PATH변수의 맨 앞에 가상 환경 경로 추가: 현재 셸 세션의 메모리에 있는PATH변수 맨 앞에.venv/bin디렉토리 경로를 추가한다. 이로써 셸은 다른 시스템 경로보다 가상 환경 폴더를 먼저 뒤지게 된다.사용자 편의를 위한 프롬프트 변경: 터미널 프롬프트 앞에
(.venv)와 같은 표시를 추가한다.
deactivate의 본질: PATH 원상복구
deactivate는 그저 activate가 했던 일을 반대로 수행할 뿐이다. 즉, PATH 변수 맨 앞에 추가했던 가상 환경 경로를 제거하고 프롬프트를 원래대로 되돌린다.
결국 "활성화"와 "비활성화"는 시스템의 상태를 바꾸는 것이 아니라, 현재 터미널 세션의 메모리에 있는 PATH라는 문자열을 잠시 수정했다가 되돌리는 작업에 불과했다.
깨달음: 모든 것은 세션 안에 있다
이 원리를 이해하자 모든 질문이 풀렸다.
Q: 왜
deactivate없이 폴더를 삭제해도 프롬프트는 그대로였나?- A: 폴더 삭제는 물리적인 변경일 뿐, 터미널 프로세스의 메모리에 저장된
PATH와 프롬프트 설정은 그대로였기 때문이다. 터미널은 폴더가 사라졌는지 실시간으로 알지 못한다.
- A: 폴더 삭제는 물리적인 변경일 뿐, 터미널 프로세스의 메모리에 저장된
Q: 왜 터미널을 껐다 켜니 모든 게 리셋됐나?
- A: 터미널을 끄는 순간, 해당 프로세스와 함께 메모리에 있던 모든 임시 정보(
activate로 변경된PATH포함)가 소멸하기 때문이다. 새 터미널은.zshrc를 다시 읽어 깨끗한 초기 상태로 시작할 뿐이다.
- A: 터미널을 끄는 순간, 해당 프로세스와 함께 메모리에 있던 모든 임시 정보(
오늘의 결론 (TIL)
파이썬 가상 환경의
activate와deactivate는 시스템의 영구적인 상태를 바꾸는 마법이 아니다. 단지 현재 실행 중인 터미널 세션의 메모리 속PATH환경 변수를 임시로 수정하고 복원하는 단순하고 명쾌한 작업일 뿐이다. 모든 것은 세션이 끝나면 사라진다.
단, 오늘은 PATH에 집중해서 학습했을 뿐, 가상환경 활성화할 때 더 많은 일들을 할 것으로 예상한다. 이 부분은 추후 더 알아보겠다.