프로젝트마다 ‘작은 우주’를 만드는 법, Python Venv – 파이썬 가상환경 설정 6편

파이썬 가상환경 만들기(python venv create) 관련해서 여기까지(1~5편) 오면서 이상하게 이런 일이 자주 생길 수가 있습니다.
- 어제까지 잘 되던 코드가 오늘은 안 돼요
- A 프로젝트에서 설치한 패키지가 B 프로젝트를 망가뜨려요
- “pip install” 한 번 했는데, 왜 전체가 흔들리죠?
이때 많은 분들이 스스로를 탓해요.
“내가 뭘 잘못했나…?” 하고요.
그런데 솔직히 말하면, 이건 실수라기보다 구조 문제에 가깝습니다.
파이썬을 “전역(글로벌)” 하나로만 쓰면, 서로 다른 프로젝트들이 같은 주방에서 요리하는 상황이 돼요.
- 한쪽은 “소금”을 1스푼 넣고 싶은데
- 다른 쪽은 “소금”이 아니라 “설탕”을 넣어야 하고
- 둘 다 같은 통(같은 site-packages)을 쓰면
- 결국 한쪽은 망합니다.
가상 환경은 이 문제를 “실력”이 아니라 “구조”로 해결해요.
프로젝트마다 각자 냉장고/주방을 만들어주는 것.
그게 가상 환경입니다. (packaging.python.org)
오늘 목표(핵심 4개)
- 파이썬 가상환경 만들기(python venv create)
- 활성화/비활성화(python venv activate/deactivate)
requirements.txt로 공유/재현(협업의 핵심)- direnv로 자동 활성화(“들어가면 켜지고, 나오면 꺼지는” 느낌)
1) Python venv vs virtualenv? 뭐를 써야 하죠?
초보자 기준으로는 이렇게 정리하면 편합니다.
- venv: 파이썬 표준 라이브러리(추가 설치 없이 바로 사용)
- virtualenv: 더 확장된 기능/유연성(특정 상황에서 유리)
이 시리즈는 사용자 메모에 맞춰 virtualenv 흐름을 메인으로 가되, “기본은 venv도 된다”는 감각을 같이 드릴게요.
2) Mac 편: 파이썬 가상 환경 만들기 실전 루틴
Step 0. 프로젝트 폴더로 이동
pwd
cd ~/projects/my_proj # 폴더 위치와 이름은 본인이 정하기Step 1. virtualenv 설치(딱 한 번)
python3 -m pip install virtualenvStep 2. 파이썬 가상환경 만들기(프로젝트 전용 “작은 우주” 생성)
virtualenv 명령어를 이용하여 파이썬 가상환경 폴더(예: data_science_env)를 하나 만듭니다.
virtualenv --python=python3.7 data_science_env팁:
--python是-p로 줄일 수 있어요.python3.7대신 절대 경로를 넣을 수도 있습니다(이미 설치된 인터프리터만 가능).
이 개념이 바로 “내가 원하는 파이썬 버전을 이 프로젝트에 고정”하는 감각입니다.
Step 3. 가상환경 활성화(python venv activate)
source data_science_env/bin/activatesource 명령어를 이용하여 파이썬 가상환경을 활성화하면 터미널 프롬프트 앞쪽에 (data_science_env) 같은 표시가 붙게 됩니다.
이 표시가 보이면, 지금부터는 “이 프로젝트 전용 냉장고”에서 요리한다고 생각하면 됩니다.
Step 4. 이제부터는 python/pip를 간단히 써도 OK
가상 환경 안에서 작업을 할 때는 보통 python3 대신 蟒蛇, pip3 대신 核心를 사용해도 안전해집니다(가상 환경이 PATH를 앞쪽으로 바꿔주기 때문)
python --version
pip listStep 5. 패키지 설치 & 버전 고정(예시)
pip install numpy==1.20.1
pip list # 설치된 패키지 리스트 확인Step 6. 협업의 핵심: requirements.txt 만들기
pip freeze > requirements.txt
cat requirements.txt # 가상환경 내 설치한 패키지 목록 확인이 파일이 있으면 “내 환경을 그대로 복제”할 수 있어요. 복제하기 위해서는 pip install -r requirements.txt 명령어를 사용하면 됩니다.
Step 7. 파이썬 가상환경 비활성화(python venv deactivate)
deactivate3) Windows 편: 가상 환경(virtualenv) 실전 루틴
Windows에서는 PowerShell 기준으로 안내할게요. (CMD도 가능하지만 표기가 조금 달라요)
Step 0. 프로젝트 폴더로 이동
cd C:\projects\my_projStep 1. virtualenv 설치
py -m pip install virtualenvStep 2. 파이썬 가상환경 만들기
virtualenv -p python3.8 django_proj_env
python3.8이 인식이 안 되면, 2편에서 했던 것처럼py -0p/설치 버전 확인 후 맞춰가는 방식이 필요할 수 있어요. (이건 환경마다 달라서 “경로/버전 확인” 습관이 빛납니다.)
Step 3. 파이썬 가상환경 활성화(python venve activate)
PowerShell:
.\django_proj_env\Scripts\Activate.ps1CMD:
.\django_proj_env\Scripts\activate.batStep 4. 패키지 설치/목록
pip install numpy==1.20.1
pip listStep 5. requirements.txt 만들기
pip freeze > requirements.txt
type requirements.txtStep 6. 비활성화
deactivate4) “환경 공유”가 진짜로 동작하는지, 한 번 연습해볼까요?

여기부터가 통찰 포인트예요.
가상 환경은 “내 PC에서만 깔끔한 장난감”이 아니라, 다른 PC에서도 똑같이 재현되느냐가 핵심입니다.
시나리오: user2 폴더에서 똑같이 복제하기
- 기존 프로젝트에서
requirements.txt확보 - 새 폴더로 이동
- 새 가상 환경 만들기
- requirements로 한 번에 설치
Mac 예시:
mkdir user2
cd user2
cp ../requirements.txt .
virtualenv -p python3.7 data_science_env
source data_science_env/bin/activate
pip install -r requirements.txt
pip listWindows 예시(개념 동일):
mkdir user2
cd user2
copy ..\requirements.txt .
virtualenv -p python3.8 django_proj_env
.\django_proj_env\Scripts\Activate.ps1
pip install -r requirements.txt
pip list이 연습을 한 번 해보면 “아, 내가 만든 환경이 다른 곳에서도 살아나네”라는 감각이 생깁니다.
이 감각이 생기면 협업이 쉬워져요.
5) direnv로 “자동 가상환경” 만들기
여기서 한 단계 더 창의적으로 가볼게요.
가상 환경의 고통 포인트는 의외로 이겁니다.
- “아 맞다… activate 안 했네?”
- “왜 import가 안 되지?”
- 알고 보니 가상 환경 밖에서 실행함…
direnv는 이걸 “습관”이 아니라 “시스템”으로 해결합니다.
특정 폴더에 들어가면 자동으로 환경이 설정되고, 나오면 자동으로 해제됩니다.
핵심 개념
- 프로젝트 루트에
.envrc를 둔다 - direnv가 이를 읽고 환경을 적용한다(보안상 “허용” 절차가 있음)
예시 아이디어(개념용):
.envrc에 “가상 환경 자동 생성/활성화” 스크립트를 넣어서- 누구든 폴더 들어오면 환경이 동일하게 켜지도록
direnv 관련 참고 아이디어로 layout python3 같은 접근도 커뮤니티에서 많이 씁니다.
이 파트는 “필수”가 아니라 “경험이 쌓이면 생산성이 폭발하는 보너스 기술” 정도로만 기억해두면 충분해요.
6) 오늘의 체크리스트
- 프로젝트 폴더에 가상 환경을 만들었다
- 활성화/비활성화를 해봤다
pip freeze > requirements.txt로 환경 스냅샷을 만들었다 .- 새 폴더에서
pip install -r requirements.txt로 복제해봤다. - direnv가 “왜 강력한지” 감을 잡았다.
마무리: 파이썬 환경 설정의 진짜 완성은 “충돌을 예방하는 구조”
가상 환경을 쓰기 시작하면, 파이썬은 갑자기 “얌전해”집니다.
사실 파이썬이 바뀐 게 아니라, 내가 프로젝트를 다루는 구조가 바뀐 거예요.
그리고 여기서부터는 개발이 조금 더 창의적으로 변합니다.
- 프로젝트를 새로 시작할 때 “환경부터 설계”하게 되고
- 협업할 때 “내 PC에서만 되는 코드”를 줄일 수 있고
- 배포/서버/노트북 교체에도 흔들리지 않게 됩니다.
이제 여러분도 파이썬 가상환경 마스터가 되신 것을 축하드립니다!






