가상환경 (Virtual Environment)
= 프로젝트마다 독립된 Python 실행 환경
즉
내 컴퓨터 하나인데 → 프로젝트마다 따로 Python 설치한 느낌

프로젝트 A → FastAPI 0.100 필요
프로젝트 B → FastAPI 0.80 필요
충돌 발생
Venv-A → FastAPI 0.100
Venv-B → FastAPI 0.80
서로 완전히 분리됨
프로젝트마다 필요한 버전 다름
하나 망가져도 다른 프로젝트 영향 없음
pip freeze > requirements.txt
다른 사람도 동일 환경 재현 가능
global에 패키지 난장판 되는 거 방지

이 안에 Python + 라이브러리 다 들어있음
mkdir venvs
cd venvs
python -m venv myapi
myapi = 가상환경 이름
Mac / Linux
source myapi/bin/activate
Windows
myapi\Scripts\activate
실행되면
(myapi) $
앞에 이름 붙음 = 활성화 상태
deactivate
pip install fastapi
이 가상환경에만 설치됨
가상환경 디렉토리 확인
ls ~/venvs
또는
dir C:\venvs
방법 2 (conda 사용 시)
conda env list
방법 3 (pip 기준 현재 환경 확인)
which python
또는
where python
어떤 가상환경인지 확인 가능
pip list
또는
pip freeze
개발할 때
프로젝트마다 무조건 가상환경 생성
협업할 때
pip freeze > requirements.txt
현재 가상환경에 설치된 패키지 목록을 파일로 저장
(pip freeze 실행하면
fastapi==0.110.0
uvicorn==0.29.0
pydantic==2.6.0
이런식으로 나오고
> 이게 결과를 파일로 저장하라는 것
)
pip install -r requirements.txt
requirements.txt에 있는 패키지들을 전부 설치
협업할때 .gitignore
# 🐍 Python
__pycache__/
*.py[cod]
*$py.class
# 🔧 Virtual Environment
venv/
.env/
.venv/
# 📦 Distribution / build
build/
dist/
*.egg-info/
# 📄 Logs
*.log
# 🔐 Environment variables
.env
# 🧠 IDE / Editor
.vscode/
.idea/
# 🍎 macOS
.DS_Store
# 🪟 Windows
Thumbs.db
# 🧪 pytest
.pytest_cache/
# 📊 coverage
.coverage
htmlcov/
# 🔄 mypy
.mypy_cache/
# 🔥 FastAPI / uvicorn
*.sqlite3
# 🧾 기타
*.swp
프로젝트 간 의존성 충돌을 방지하고 동일한 실행 환경을 재현하기 위해 가상환경을 사용