기술블로그-Django편
pyenv와 venv의 차이 및 충돌 상황 정리 (Windows 기준)
Chansman
2025. 4. 29. 12:05
💡 pyenv와 venv의 차이 및 충돌 상황 정리 (Windows 기준)
Mac에서도 pyenv만 쓰면 가상환경 격리는 안 된다. 하지만
pyenv-virtualenv를 추가로 써야 진짜로 버전과 가상환경까지 완벽히 분리된다!
eval \"$(pyenv init --path)\"
eval \"$(pyenv init -)\"
eval \"$(pyenv virtualenv-init -)\"
🎯 아주 깔끔한 비교표
항목 Windows pyenv-win Mac/Linux pyenv + pyenv-virtualenv
기본 설치 | pyenv만 | pyenv + pyenv-virtualenv 설치 가능 |
Python 버전 격리 | ✅ | ✅ |
패키지(pip) 격리 | ❌ pyenv만으로는 불가능 | ⭕ pyenv-virtualenv 쓰면 가능 |
🔎 문제 상황 요약
Windows 환경에서 다음과 같은 혼동/오류 상황이 발생했다:
pyenv local 3.13.2
python.exe -m pip install --upgrade pip
그러나 pip 경로가 아래처럼 시스템 Python 경로로 나오는 현상:
Requirement already satisfied: pip in c:\users\LG 울트라PC\appdata\local\programs\python\python313\lib\site-packages (25.1)
➡️ 이건 pyenv로 Python 버전을 지정했지만, 실제 가상환경(venv)을 만들지 않았기 때문이다.
🔧 원인 분석
항목 설명
pyenv | 여러 Python 버전 설치 및 폴더별 선택만 해주는 도구 (가상환경 아님) |
venv | 하나의 Python 버전을 기반으로 독립된 패키지 공간을 만드는 도구 |
오류 원인 | pyenv만 사용했고, 별도의 venv 생성이 없었기 때문에 시스템 pip가 호출됨 |
✅ 해결 방법 요약
1. pyenv로 Python 버전 선택
pyenv install 3.13.2
pyenv local 3.13.2
2. 해당 폴더에서 가상환경(venv) 생성
python -m venv .venv
3. 가상환경 활성화 (Windows PowerShell 기준)
.\.venv\Scripts\Activate
deactivate
4. pip 업그레이드 확인 (이제 venv 내부 pip가 사용됨)
python -m pip install --upgrade pip
🧠 핵심 개념 비교: pyenv vs venv
항목 pyenv venv
역할 | 다양한 Python 버전 설치 및 전환 | 독립된 패키지 환경 생성 |
격리 단위 | Python 자체 | pip 패키지 공간 |
추천 상황 | 여러 버전이 필요한 개발자 | 프로젝트별 분리 필요할 때 |
조합 가능 여부 | ✅ 함께 사용하면 최강 | ✅ pyenv + venv = 실무 조합 |
🎯 최종 정리
pyenv는 Python 버전 관리자일 뿐, pip 환경까지 격리해주지 않는다.
python -m venv로 독립된 가상환경을 만들어야 pip가 제대로 분리되어 설치된다.
✅ pyenv + venv 조합을 쓰면:
- 버전도 따로, 패키지도 따로 관리 가능
- 실무에서 완벽한 프로젝트 환경 분리가 가능하다.
✨ 실전 명령어 흐름
pyenv install 3.13.3
mkdir flask-app
cd flask-app
pyenv local 3.13.3
python -m venv .venv
.\.venv\Scripts\Activate
pip install flask
mkdir django-app
cd django-app
pyenv local 3.13.3
python -m venv .venv
.\.venv\Scripts\Activate
pip install django
📌 → flask-app과 django-app은 버전과 패키지가 완전히 격리된 진짜 가상환경!
✅ 이런 흐름을 알고 쓰면 pyenv와 venv를 헷갈릴 일이 없다!