4강. 가상환경 구현: 기본 python3

0. 학습 목표
→ 첫 가상환경을 직접 만들고, 실행 경로가 바뀌는 순간을 확인합니다.
0.1 이번 글에서 다룰 내용
이번 글은 구현 중심 강의입니다.
3강에서 도구를 준비하고 PATH 검색 원리를 이해했으니, 이번 강의에서는 드디어 첫 가상환경을 만듭니다.
흐름은 생성 → 활성화 → 확인 → 비활성화 네 단계입니다.
테스트 폴더 생성
↓
python3 -m venv test_venv (가상환경 생성)
↓
source test_venv/bin/activate (활성화)
↓
which python 으로 경로 확인
↓
가상환경 내부 경로가 출력됨 ← 이번 강의의 성공 지점
↓
deactivate (비활성화)
핵심 성공 기준은 which python의 출력 경로가 활성화 전후에 달라지는 것입니다.
이것이 확인되면 3강에서 배운 "가상환경 = PATH 검색 순서를 바꾸는 장치"가 실제로 동작한 것입니다.
| 구분 | 내용 |
| 이해할 것 | 가상환경 활성화가 PATH를 통해 python·pip 실행 경로를 바꾸는 방식 |
| 만들 것 | ~/Dev/Python/test_venv — 기본 python3 기반 첫 가상환경 |
| 확인할 것 | 활성화 전후 which python 경로 차이, Thunar로 가상환경 폴더 내부 구조 |
0.2 이번 강의에서 직접 다루는 구조
이번 강의에서 만드는 폴더와 가상환경입니다.
~/Dev/
└── Python/ ← ➕ 이번 강의에서 생성 (테스트 폴더)
└── test_venv/ ← ➕ 이번 강의에서 생성 (가상환경)
├── bin/ python, pip, activate 스크립트
├── lib/ 패키지 설치 공간
└── pyvenv.cfg 가상환경 설정 정보
(➕ 새로 생성 · ✏️ 수정 · 표시 없음은 변경 없음)
1. 가상환경 만들기
→ 테스트 폴더를 만들고, 그 안에 venv로 가상환경을 생성합니다.
1.1 테스트 폴더 생성하기
터미널을 열고 실습용 폴더를 만든 뒤 그 폴더로 이동합니다.


mkdir -p ~/Dev/Python # 실습 폴더 생성 (-p: 중간 경로까지 함께 생성)
cd ~/Dev/Python # 생성한 폴더로 이동
3강에서 설정한 Thunar 트리에서 홈 → Dev → Python 폴더가 실제로 생긴 것을 확인합니다.
터미널 명령의 결과를 눈으로 확인하는 이 습관을 매 단계 유지합니다.
1.2 가상환경 생성하기
현재 폴더 안에 test_venv라는 이름의 가상환경을 생성합니다.


python3 -m venv test_venv # 기본 python3 기준으로 test_venv 가상환경 생성
이 명령은 Python을 새로 설치하는 것이 아닙니다.
현재 python3를 기반으로, Python 작업에 필요한 요소를 복사해 별도의 작업 공간을 만드는 것입니다.
그래서 몇 초 만에 끝납니다.
생성이 끝나면 Thunar에서 test_venv 폴더를 열어봅니다.
안에는 프로젝트에서 사용할 Python 실행 파일, pip, 패키지 설치 공간이 준비되어 있습니다.
test_venv/
├── bin/ ← python, pip, activate가 이 안에 있음
│ ├── python
│ ├── pip
│ └── activate
├── lib/
│ └── python3.x/
│ └── site-packages/ ← 이 가상환경 전용 패키지 설치 위치
└── pyvenv.cfg ← 가상환경 설정 정보
중간에 문제가 생겼다면 가상환경 폴더를 지우고 처음부터 다시 만들면 됩니다.
가상환경은 언제든 지우고 다시 만들 수 있는 소모품입니다.
rm -rf ~/Dev/Python/test_venv # 문제가 있을 때: 가상환경 삭제
python3 -m venv ~/Dev/Python/test_venv # 다시 생성
✔ 확인 기준: Thunar에서 test_venv 폴더 안에 bin, lib, pyvenv.cfg가 보이면 생성 완료입니다. 아직 아무것도 활성화되지 않은 상태이며, 이것이 정상입니다.
2. 가상환경 활성화와 비활성화
→ 활성화로 터미널의 python을 가상환경 쪽으로 전환하고, 다시 원래대로 돌아옵니다.
2.1 활성화하기

source test_venv/bin/activate # 가상환경 활성화
활성화하면 프롬프트 맨 앞에 (test_venv)가 붙습니다. 이 표시가 "지금 이 터미널은 가상환경 모드"라는 뜻입니다.
user@ubuntu:~/Dev/Python$ source test_venv/bin/activate
(test_venv) user@ubuntu:~/Dev/Python$ ← 프롬프트 앞에 (test_venv)가 붙으면 정상
내부에서 일어난 일은 3강에서 배운 그대로입니다.
activate 스크립트가 test_venv/bin 디렉터리를 PATH의 맨 앞에 추가했습니다.
이제 python이나 pip를 입력하면 셸의 PATH 검색에서 가상환경의 실행 파일이 시스템 경로보다 먼저 발견되어 실행됩니다.
2.2 비활성화하기
deactivate # 가상환경 비활성화
프롬프트의 (test_venv) 표시가 사라지고, 현재 터미널은 다시 시스템 Python 기준으로 돌아갑니다.
활성화는 컴퓨터 전체가 아니라 현재 터미널 세션에만 적용되므로, 터미널을 새로 열면 언제나 비활성 상태에서 시작합니다.
✔ 확인 기준: source test_venv/bin/activate 입력 시 프롬프트에 (test_venv)가 나타나고, deactivate 입력 시 사라지면 완료입니다. 다음 섹션의 경로 비교를 위해 다시 활성화하지 말고 비활성 상태로 두세요.
3. 시스템 Python vs 가상환경 Python 경로 비교하기
→ which 명령으로 활성화 전후의 실행 경로 차이를 직접 검증합니다.
3.1 활성화 전 — 시스템 경로 확인
가상환경이 비활성화된 상태에서 현재 python3와 pip3의 경로를 확인합니다.

which python3 # 시스템 python3의 경로 확인
which pip3 # 시스템 pip3의 경로 확인
시스템 경로 확인 결과:

/usr/bin/python3
/usr/bin/pip3
둘 다 시스템 디렉터리인 /usr/bin 아래에 있습니다. 이 두 줄을 기억해 두세요. 잠시 후 비교 기준이 됩니다.
3.2 활성화 후 — 가상환경 경로 확인
이제 가상환경을 활성화하고 같은 확인을 반복합니다.
활성화 후에는 python3 대신 python으로도 확인할 수 있습니다.
가상환경 안에는 python이라는 이름의 실행 파일이 준비되어 있기 때문입니다.

source test_venv/bin/activate
which python # 이번에는 어떤 python이 발견되는가?
which pip
가상환경 경로 확인 결과:

/home/사용자명/Dev/Python/test_venv/bin/python
/home/사용자명/Dev/Python/test_venv/bin/pip
경로가 완전히 달라졌습니다.
시스템 디렉터리가 아니라 프로젝트 폴더 안의 가상환경 경로가 출력됩니다.
같은 터미널, 같은 명령인데 활성화 하나로 실행 대상이 바뀐 것입니다.
가상환경 활성화 전
→ /usr/bin/python3 (시스템 디렉터리)
가상환경 활성화 후
→ ~/Dev/Python/test_venv/bin/python (프로젝트 내부) ← 이번 강의의 성공 지점
pip도 마찬가지입니다.
이 상태에서 pip install을 실행하면 패키지가 시스템이 아니라 test_venv 안의 site-packages에 설치됩니다.
2강에서 세운 "시스템 Python은 건드리지 않는다"는 원칙이 이 구조 덕분에 자동으로 지켜집니다.
실제 패키지 설치는 9강에서 진행합니다.
3.3 두 환경의 위치 정리
지금까지 확인한 내용을 위치 기준으로 정리하면 다음과 같습니다. Thunar 트리에서 왼쪽 열의 경로들을 직접 찾아가 보면 확실해집니다.
| 구분 | 위치 |
| 시스템 Python 실행 파일 | /usr/bin/python3 |
| 시스템 pip 실행 파일 | /usr/bin/pip3 |
| 시스템 패키지 위치 | /usr/lib/python3/dist-packages |
| 가상환경 Python 실행 파일 | ~/Dev/Python/test_venv/bin/python |
| 가상환경 pip 실행 파일 | ~/Dev/Python/test_venv/bin/pip |
| 가상환경 패키지 위치 | ~/Dev/Python/test_venv/lib/python3.x/site-packages |
시스템 환경은 시스템 쪽 디렉터리에, 가상환경은 프로젝트 내부 디렉터리에 있다는 대비가 핵심입니다.
"환경이 분리되었다"는 말의 실체는 결국 디렉터리가 분리되었다는 것입니다.
✔ 확인 기준: 활성화 전 which python3가 /usr/bin/python3, 활성화 후 which python이 ~/Dev/Python/test_venv/bin/python을 출력하면 이번 강의 완료입니다.
활성화 후에도 시스템 경로가 나온다면 프롬프트에 (test_venv)가 있는지 먼저 확인하고, 없다면 source test_venv/bin/activate를 현재 폴더(~/Dev/Python)에서 다시 실행하세요.
→ 다음 강의 (5강): 이번 가상환경은 시스템의 기본 python3 버전을 그대로 물려받았습니다. 그런데 프로젝트가 요구하는 버전이 시스템 기본 버전과 다르다면? 5강에서 원하는 특정 버전(python3.13)을 시스템 Python과 별개로 설치하고, 6강에서 그 버전으로 가상환경을 만듭니다.