- Python의 가상환경을 만드는 기능을 가진 파이썬 표준 라이브러리
- 프로젝트 전용 실행 환경을 만듦
- Python 실행 경로와 패키지 경로를 격리
- 가상환경 이유
- 프로젝트별 패키지 분리
- 프로젝트마다 필요한 라이브러리가 다름
- 각 프로젝트에 필요한 패키지만 설치 가능
- 버전 충돌 방지
- 같은 라이브러리도 버전이 달라 문제가 발생할 수 있음
- 개발환경 재현 쉬움
requirements.txt 같은 파일과 함께 쓰면 다른 사람도 같은 환경 쉽게 만듦
- 전역 Python 오염 방지
- 무작정
pip install을 전역에 하면 나중에 어디에 무엇이 설치됐는지 꼬일 수 있음
venv는 파이썬 레벨 격리(Python 패키지)
Docker는 시스템 레벨 격리(OS, Python, 라이브러리, 실행환경 전체)
세팅
가상환경 생성
python -m venv .venv
- 프로젝트 폴더에서 위 명령어 실행
- 명령어
- python: 현재 사용 중인 파이썬 실행기
- -m: 모듈을 실행
- venv: 가상환경 생성 모듈
- .venv: 생성될 가상환경 폴더 이름
구조
project/
├─ main.py
└─ .venv/
├─ Include/
├─ Lib/
├─ Scripts/
└─ pyvenv.cfg
.venv 폴더에 포함된 요소
- 프로젝트 전용 Python 실행기
- 프로젝트 전용 pip
- 프로젝트 전용 패키지 설치 공간
- 가상환경 설정 정보
/Include
.venv/Include
- C 확장 모듈 빌드 시 사용하는 헤더파일 저장 위치
- C 확장 모듈(C extension module)
- C언어(또는 C++)로 작성되어 Python에서 import하여 사용하는 모듈(
numpy, lxml 등)
- Python.h 등 C API 헤더파일이 위치하며 일부 패키지 빌드 시 참조
/Lib
.venv/Lib
- 가상환경의 Python 라이브러리 저장 공간
- 폴더내에
site-packages있음
site-packages
- 설치한 외부 패키지가 들어감(requests, flask, fastapi, numpy 등등)
/Scripts
.venv/Scripts
- Windows는
Scripts, macOS는 bin
- 포함된 요소들은 차이가 있을 수 있음
- 내용
- python.exe
- pythonw.exe
- 콘솔 창 없이 Python GUI 프로그램 실행용
- 예: Tkinter, PyQt, 데스크톱 앱 실행
- Windows 전용 느낌이 강함
- pip.exe
- 가상환경 전용 pip 실행기
pip install 패키지명 입력 시 전역이 아니라 venv/Lib/site-packages에 설치됨
- activate
- cmd/git bash 등에서 사용되는 활성화 스크립트
- 실행 시
- PATH 변경
- 현재 쉘에서 Python ->
.venv python 우선 사용
- 프롬프트에
(.venv) 표시
- Activate.ps1
- activate.bat
- CMD(Windows Command Prompt)용 배치 스크립트
- deactivate
- 가상환경 상태 해제하는 명령
- PATH / 프롬프트 / 환경변수를 원래 상태로 복구
pyvenv.cfg
home = C:\Users\MSI\AppData\Local\Programs\Python\Python313
include-system-site-packages = false
version = 3.13.2
executable = C:\Users\MSI\AppData\Local\Programs\Python\Python313\python.exe
command = C:\Users\MSI\AppData\Local\Programs\Python\Python313\python.exe -m venv C:\PythonProject\.venv
- 이 가상환경이 어떤 Python 기반으로 만들어졌고 어떻게 동작해야 하는지를 알려주는 메타데이터 파일
- 파일이 손상되면 가상환경이 깨질 수 있음
- 가상환경의 Python 실행기가 시작될 때 pyvenv.cfg를 참고
- 현재 Python 실행기가 가상환경에 속한 실행기인지 판단
- 패키지 검색 경로(
site-packages) 결정
- base Python 위치 확인
- pip 동작 기준 설정
- 내용
home
- 가상환경 생성에 사용된 원본 Python 설치 경로
venv 자체가 Python을 새로 설치한게 아님
- 기존의 Python을 복사/링크해서 만든 환경임
include-system-site-packages
- 시스템 전역 패키지를 가상환경에서 사용할지 여부
- false: 가상환경 내부 패키지만 사용(보통 기본값인 false로 함)
version
executable
command
추가 요소
requirements.txt
#생성
pip freeze > requirements.txt
#설치
pip install -r requirements.txt
- 프로젝트에서 사용하는 패키지 목록과 버전을 기록한 파일
- 개발환경을 동일하게 재현하기 위해 사용
.gitignore
# .gitignore
.venv/
__pycache__/
*.pyc
.env
.vscode/
- Git에서 추적하지 않을 파일 목록 지정
.venv/
- 용량이 큼
- OS마다 구성요소가 다름
- 가상환경 폴더는 언제든 재생성 가능