기술블로그-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를 헷갈릴 일이 없다!