Python venv

LshDevLog·2026년 4월 24일

python

목록 보기
13/16
post-thumbnail
  • 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
      • 가상환경 전용 Python 실행기
    • 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
      • PowerShell 용 활성화 스크립트
    • 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
      • 가상환경이 기반으로한 Python의 버전
    • executable
      • 원본 Python 실행 파일 위치
    • command
      • 어떤 명령어로 생성되었는지

추가 요소

requirements.txt

#생성
pip freeze > requirements.txt

#설치
pip install -r requirements.txt
  • 프로젝트에서 사용하는 패키지 목록과 버전을 기록한 파일
  • 개발환경을 동일하게 재현하기 위해 사용

.gitignore

# .gitignore

.venv/
__pycache__/
*.pyc
.env
.vscode/
  • Git에서 추적하지 않을 파일 목록 지정
  • .venv/
    • 용량이 큼
    • OS마다 구성요소가 다름
    • 가상환경 폴더는 언제든 재생성 가능

0개의 댓글