콘텐츠로 건너뛰기

파이썬 가상환경(venv) 왜 써야 할까? : 초보자가 자주 겪는 라이브러리 충돌 해결법

12월 9, 2025
파이썬 venv 가상환경 설정 방법 - 프로젝트별 패키지 분리 개념도

안녕하세요! 파이썬 입문 시리즈 3편입니다. 오늘은 초보자들이 가장 많이 헷갈려하지만, 반드시 알아야 할 개념인 파이썬 가상환경(venv)에 대해 알아볼 거예요.

“가상환경이 뭐예요?”, “왜 써야 해요?”, “그냥 pip install 하면 안 되나요?” 이런 질문들, 정말 많이 받아요. 저도 처음에 똑같은 의문을 가졌거든요.

오늘 이 글을 끝까지 읽으시면, 가상환경이 왜 필요한지 완벽하게 이해하고, 직접 만들어서 사용할 수 있게 될 거예요!

💡 이 글에서 배울 내용:

✅ 가상환경이 뭔지 쉽게 이해하기
✅ 가상환경이 없으면 생기는 문제 (실제 사례)
✅ 가상환경 만들고, 켜고, 끄는 방법
✅ 패키지 설치 및 관리하기
✅ requirements.txt로 환경 공유하기
✅ 자주 하는 실수와 해결법

가상환경이란? 쉬운 비유로 이해하기

가상환경을 한 마디로 설명하면 “프로젝트 전용 독립된 방”이에요.

비유를 들어볼게요. 여러분이 요리사라고 상상해 보세요.

🍳 요리사 비유: 가상환경 없이 일하는 상황

주방이 하나밖에 없어요. 이탈리안 레스토랑, 일식당, 중식당 요리를 모두 이 하나의 주방에서 해야 해요.

문제가 생깁니다. 이탈리안 요리에는 올리브오일이 필요한데, 일식에는 참기름이 필요해요. 그런데 같은 자리에 두 기름을 놓으니 자꾸 헷갈리고 잘못 집어요.

더 큰 문제도 있어요. 이탈리안 요리에는 바질 1.0 버전(어린 바질)이 필요한데, 중식에는 바질 2.0 버전(성숙한 바질)이 필요해요. 하나의 주방에는 한 종류의 바질만 있을 수 있으니, 둘 중 하나는 포기해야 해요.

🍳 가상환경을 쓰면?

주방을 3개로 분리합니다! 이탈리안 전용 주방, 일식 전용 주방, 중식 전용 주방.

각 주방에는 해당 요리에 필요한 재료만 딱 갖춰놓아요. 서로 섞이지 않으니 헷갈릴 일도 없고, 각 요리에 맞는 버전의 재료를 사용할 수 있어요!

가상환경 개념 비유 – 분리된 주방 예시 파이썬 가상환경 = 프로젝트별 독립된 공간 ❌ 가상환경 없이 하나의 공간 Django 3.0 ← 충돌! Django 4.2 ← 충돌! requests 2.25 numpy 1.19 ← 충돌! ⚠️ 버전이 섞여서 에러 발생! ✅ 가상환경 사용 프로젝트 A Django 3.0 ✓ numpy 1.19 ✓ requests 2.25 ✓ 프로젝트 B Django 4.2 ✓ numpy 1.24 ✓ requests 2.31 ✓ ✅ 각자 독립! 충돌 없음! 💡 가상환경 = 프로젝트마다 필요한 라이브러리를 따로 설치하는 독립된 공간

파이썬으로 돌아와서

파이썬에서도 똑같아요. 여러분이 두 개의 프로젝트를 진행한다고 해볼게요:

프로젝트 A (회사 레거시 시스템): Django 3.0이 필요해요

프로젝트 B (개인 사이드 프로젝트): Django 4.2가 필요해요

가상환경 없이 pip install django를 하면, 컴퓨터에는 Django 하나만 설치돼요. 3.0을 설치했다가 4.2를 설치하면 3.0은 사라지고 4.2로 덮어씌워져요.

결국 하나의 프로젝트는 망가지게 됩니다.

🚨 실제로 자주 발생하는 에러:

ModuleNotFoundError: No module named 'django'
ImportError: cannot import name 'xxx' from 'django'
AttributeError: module 'numpy' has no attribute 'xxx'

이런 에러가 났다면, 99%는 라이브러리 버전 문제예요!

가상환경 없이 겪는 실제 문제 사례

제가 실제로 겪었던 일이에요. 초보 시절에 가상환경을 몰라서 엄청 고생했어요.

🔥 사례 1: “어제까지 됐는데 왜 안 돼요?”

웹 크롤링 프로젝트를 진행하고 있었어요. requests 라이브러리를 사용해서 잘 돌아가던 코드였어요.

다음 날, 다른 프로젝트를 시작하면서 pip install requests --upgrade를 실행했어요. 최신 버전으로 업그레이드한 거죠.

그런데 갑자기 어제까지 잘 되던 크롤링 코드가 에러를 뿜기 시작했어요. 새 버전에서 일부 함수 사용법이 바뀌었던 거예요.

🔥 사례 2: “내 컴퓨터에선 되는데 서버에서 안 돼요”

열심히 만든 프로젝트를 서버에 배포했어요. 근데 에러가 나요.

원인을 찾아보니, 제 컴퓨터에는 pandas 1.5가 설치되어 있는데 서버에는 pandas 1.3이 설치되어 있었어요. 버전이 다르니까 코드가 안 돌아간 거예요.

가상환경과 requirements.txt를 썼다면, 이런 문제를 예방할 수 있었어요.

🔥 사례 3: “라이브러리 지우다가 시스템 망가뜨림”

필요 없는 라이브러리를 정리하려고 pip uninstall을 마구 실행했어요.

그런데 그 라이브러리가 다른 라이브러리의 의존성이었던 거예요. 결국 다른 프로젝트까지 다 망가졌어요.

가상환경을 썼다면, 해당 프로젝트 폴더만 지우면 깔끔하게 정리됐을 거예요.

✅ 가상환경을 쓰면:

• 프로젝트마다 다른 버전의 라이브러리 사용 가능
• 라이브러리 충돌 걱정 없음
• 프로젝트 삭제 시 관련 라이브러리도 깔끔하게 정리
• 다른 사람/서버에 동일한 환경 쉽게 전달 가능

가상환경 만들기: 완전 쉬운 3단계

이제 실제로 가상환경을 만들어볼게요. 정말 쉬워요!

1프로젝트 폴더로 이동

먼저 프로젝트를 진행할 폴더로 이동하세요.

# 새 폴더 만들고 이동
mkdir my_project
cd my_project

2가상환경 생성

python -m venv 가상환경이름 명령어로 만들어요.

# 가상환경 생성 (venv라는 이름으로)
python -m venv venv

보통 이름을 venv 또는 env로 많이 지어요. 다른 이름도 가능해요.

3가상환경 활성화

운영체제마다 명령어가 달라요!

# Windows (cmd)
venv\Scripts\activate

# Windows (PowerShell)
venv\Scripts\Activate.ps1

# Mac / Linux
source venv/bin/activate

활성화에 성공하면, 터미널 앞에 (venv)가 표시돼요!

가상환경 활성화 전후 터미널 화면 비교 활성화 전 Terminal C:\my_project> python -m venv venv C:\my_project> venv\Scripts\activate … 활성화 중 … 활성화 후 ✓ Terminal (venv) C:\my_project> ✓ 가상환경 활성화 완료! 이제 pip install 해도 이 폴더에만 설치됨 📌 (venv)가 앞에 표시되면 성공! • 이 상태에서 pip install 하면 이 프로젝트 전용으로 설치됩니다. • 다른 프로젝트에는 영향을 주지 않아요! • 비활성화하려면: deactivate 입력
⚠️ PowerShell에서 에러가 나요!

Windows PowerShell에서 스크립트 실행 정책 때문에 에러가 날 수 있어요.

해결법: PowerShell을 관리자 권한으로 실행 후 아래 명령어 입력:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

또는 그냥 cmd(명령 프롬프트)를 사용하세요. 더 간단해요!

가상환경에서 패키지 설치하기

가상환경이 활성화된 상태에서 pip install을 하면, 해당 가상환경에만 설치돼요.

# 가상환경 활성화 확인 (앞에 (venv) 표시되어야 함)
(venv) C:\my_project>

# 패키지 설치
(venv) C:\my_project> pip install requests
(venv) C:\my_project> pip install django==4.2
(venv) C:\my_project> pip install pandas numpy matplotlib

설치된 패키지 확인하기

# 현재 가상환경에 설치된 모든 패키지 보기
(venv) C:\my_project> pip list

# 결과 예시:
Package    Version
---------- -------
django     4.2
requests   2.31.0
pandas     2.0.3
numpy      1.24.3

특정 버전 설치하기

버전을 지정해서 설치할 수도 있어요. 이게 가상환경의 핵심 장점이에요!

# 특정 버전 설치
pip install django==3.2.0

# 최소 버전 지정
pip install django>=4.0

# 버전 범위 지정
pip install django>=3.0,<4.0

requirements.txt: 환경 저장하고 공유하기

팀원과 협업하거나 서버에 배포할 때, 똑같은 라이브러리 환경을 만들어야 해요. 이때 requirements.txt를 사용해요.

현재 환경 저장하기

# 현재 설치된 모든 패키지를 requirements.txt에 저장
(venv) C:\my_project> pip freeze > requirements.txt

이렇게 하면 requirements.txt 파일이 생겨요. 열어보면 이런 내용이 있어요:

# requirements.txt 내용
django==4.2
requests==2.31.0
pandas==2.0.3
numpy==1.24.3
matplotlib==3.7.1

requirements.txt로 환경 복원하기

다른 컴퓨터나 서버에서 똑같은 환경을 만들 때:

# 새 가상환경 만들고 활성화
python -m venv venv
venv\Scripts\activate

# requirements.txt에 있는 모든 패키지 한 번에 설치
(venv) C:\my_project> pip install -r requirements.txt

끝! 완벽하게 같은 환경이 만들어져요.

requirements.txt로 환경 공유하는 과정 requirements.txt로 환경 공유하기 💻 내 컴퓨터 django==4.2 requests==2.31 pandas==2.0.3 pip freeze > requirements.txt 📄 requirements.txt django==4.2 requests==2.31.0 pandas==2.0.3 numpy==1.24.3 ... Git/Email 으로 전송 🖥️ 서버/동료 PC pip install -r requirements.txt django==4.2 ✓ requests==2.31 ✓ pandas==2.0.3 ✓ ✅ 완벽하게 동일한 환경 구축 완료!
💡 협업 필수 규칙:

1. 프로젝트 시작할 때 requirements.txt 만들기
2. 새 패키지 설치할 때마다 pip freeze > requirements.txt 실행
3. Git에 requirements.txt는 커밋하고, venv 폴더는 .gitignore에 추가!

가상환경 명령어 총정리

여기까지 배운 명령어를 한눈에 정리할게요. 이 표만 저장해두면 언제든 참고할 수 있어요!

작업 Windows (cmd) Mac / Linux
가상환경 생성 python -m venv venv python3 -m venv venv
활성화 venv\Scripts\activate source venv/bin/activate
비활성화 deactivate deactivate
패키지 설치 pip install 패키지명 pip install 패키지명
패키지 목록 보기 pip list pip list
환경 저장 pip freeze > requirements.txt pip freeze > requirements.txt
환경 복원 pip install -r requirements.txt pip install -r requirements.txt
가상환경 삭제 venv 폴더 삭제 rm -rf venv

초보자가 자주 하는 실수 5가지

❌ 실수 1: 가상환경 활성화 안 하고 pip install

(venv)가 표시 안 된 상태에서 pip install하면 전역에 설치돼요!

잘못된 예:
C:\my_project> pip install django ← (venv) 없음 = 전역 설치!
올바른 예:
(venv) C:\my_project> pip install django ← (venv) 있음 = 가상환경에 설치!

❌ 실수 2: venv 폴더를 Git에 올림

venv 폴더는 용량도 크고, 운영체제마다 다르게 생성돼요. Git에 올리면 안 돼요!

# .gitignore 파일에 추가
venv/
env/
.venv/
__pycache__/

❌ 실수 3: 프로젝트마다 같은 이름의 가상환경 사용

가상환경 이름은 보통 venv로 동일하게 짓지만, 각 프로젝트 폴더 안에 따로 만들어야 해요!

# 올바른 구조
📁 project_A/
   📁 venv/        ← project_A 전용
   📄 main.py
   
📁 project_B/
   📁 venv/        ← project_B 전용
   📄 app.py

❌ 실수 4: requirements.txt 업데이트 안 함

새 패키지를 설치하고 pip freeze를 안 하면, 나중에 환경 복원이 안 돼요!

# 새 패키지 설치할 때마다 실행!
pip install 새패키지
pip freeze > requirements.txt

❌ 실수 5: 가상환경 폴더 이름에 공백 사용

폴더 이름에 공백이 있으면 활성화할 때 에러 나요.

# ❌ 잘못된 예
python -m venv my venv

# ✅ 올바른 예
python -m venv my_venv
python -m venv myvenv

실전 연습: 가상환경으로 간단한 프로젝트 만들기

배운 내용을 직접 따라 해보세요! 5분이면 끝나요.

Step 1: 프로젝트 폴더 생성

mkdir my_first_venv_project
cd my_first_venv_project

Step 2: 가상환경 생성 및 활성화

python -m venv venv
venv\Scripts\activate

Step 3: 패키지 설치

(venv) pip install requests

Step 4: 간단한 코드 작성

VS Code로 test.py 파일을 만들고 아래 코드를 입력하세요:

# test.py
import requests

response = requests.get("https://api.github.com")
print(f"GitHub API 상태: {response.status_code}")
print(f"응답 헤더 일부: {response.headers['content-type']}")

Step 5: 실행

(venv) python test.py

GitHub API 상태: 200이 나오면 성공이에요!

Step 6: 환경 저장

(venv) pip freeze > requirements.txt
🎉 축하해요! 가상환경을 만들고, 패키지를 설치하고, 코드를 실행하고, 환경을 저장하는 전체 흐름을 완료했어요!

마무리: 다음 시리즈 미리 보기

오늘 파이썬 가상환경(venv)에 대해 완벽하게 배웠어요!

이제 여러분은 프로젝트마다 독립된 환경을 만들 수 있고, 라이브러리 충돌 걱정 없이 개발할 수 있어요. 팀원이나 서버와 동일한 환경을 공유하는 방법도 알게 됐고요!

다음 포스트에서는 깃허브(GitHub) 회원가입부터 저장소 생성까지를 다룰 예정입니다. 개발자라면 반드시 알아야 할 Git과 GitHub의 기초를 배워볼 거예요.

시리즈를 계속 따라오시려면 블로그를 구독해 주세요!

💡 오늘의 핵심 정리:

1. 가상환경 = 프로젝트 전용 독립된 공간
2. python -m venv venv로 생성
3. venv\Scripts\activate로 활성화 (Windows)
4. pip freeze > requirements.txt로 환경 저장
5. pip install -r requirements.txt로 환경 복원
6. venv 폴더는 Git에 올리지 않기!

이 글이 도움이 되셨다면 좋아요나 공유 부탁드려요. 댓글로 질문해 주시면 답변 드릴게요. 다음에 또 만나요!

error: Content is protected !!