PythonPython 기초 · 8입문

외부 패키지와 가상환경 — 파이썬 프로젝트 관리

Pythonpipvenv가상환경패키지의존성

파이썬 생태계의 힘

파이썬이 강력한 이유 중 하나는 방대한 패키지 생태계입니다.

flowchart LR
    subgraph PYPI["PyPI (패키지 저장소)\n400,000+ 패키지"]
        P1["openai\nLLM API"]
        P2["requests\nHTTP 요청"]
        P3["pandas\n데이터 분석"]
        P4["fastapi\n웹 서버"]
        P5["chromadb\n벡터 DB"]
    end

    PIP["pip install"] --> PYPI
    PYPI --> MY["내 프로젝트"]

직접 모든 기능을 구현하지 않아도 됩니다.


pip: 패키지 관리자

# 패키지 설치
pip install openai

# 특정 버전 설치
pip install openai==1.10.0

# 여러 패키지 한 번에
pip install openai langchain chromadb

# 업그레이드
pip install --upgrade openai

# 삭제
pip uninstall openai

# 설치된 패키지 목록
pip list

# 특정 패키지 정보
pip show openai

가상환경이 필요한 이유

flowchart TB
    subgraph PROBLEM["가상환경 없이"]
        S["시스템 전역 파이썬"]
        S --> A["프로젝트 A\nopenai 0.28.0 필요"]
        S --> B["프로젝트 B\nopenai 1.10.0 필요"]
        A & B -->|"버전 충돌!"| CONFLICT["💥 에러"]
    end

    subgraph SOLUTION["가상환경 사용"]
        VA["venv A\nopenai 0.28.0"]
        VB["venv B\nopenai 1.10.0"]
        VA & VB -->|"격리!"| OK["✅ 각자 독립"]
    end

프로젝트마다 독립된 파이썬 환경을 만들어 패키지 버전 충돌을 방지합니다.


venv: 가상환경 만들기

# 프로젝트 폴더 이동
mkdir my_project && cd my_project

# 가상환경 생성
python -m venv venv

# 가상환경 활성화
# macOS/Linux:
source venv/bin/activate

# Windows:
venv\Scripts\activate

# 활성화 확인 (프롬프트 앞에 (venv) 표시)
(venv) $ python --version

# 가상환경 비활성화
deactivate

requirements.txt: 의존성 기록

# 현재 설치된 패키지를 파일로 저장
pip freeze > requirements.txt

# 파일에서 패키지 일괄 설치 (다른 환경 세팅 시)
pip install -r requirements.txt

requirements.txt 예시:

openai==1.12.0
langchain==0.1.9
langchain-openai==0.0.8
chromadb==0.4.22
fastapi==0.109.2
uvicorn==0.27.1
python-dotenv==1.0.1
pydantic==2.6.1

.gitignore: 제외할 파일 설정

가상환경과 비밀 키는 Git에 올리면 안 됩니다.

# .gitignore
venv/
.env
__pycache__/
*.pyc
.DS_Store
*.log

프로젝트 표준 구조

my_llm_project/
├── venv/               # ← .gitignore에 추가
├── .env                # ← .gitignore에 추가
├── .gitignore
├── requirements.txt
├── README.md
├── main.py
├── config.py           # 설정값 모음
└── utils/
    ├── __init__.py
    └── helpers.py

.env: 환경변수 관리

API 키 같은 민감한 정보는 코드에 직접 쓰지 않습니다.

# .env 파일
OPENAI_API_KEY=sk-proj-...
TAVILY_API_KEY=tvly-...
DATABASE_URL=postgresql://localhost/mydb
DEBUG=true
# config.py
from dotenv import load_dotenv
import os

load_dotenv()  # .env 파일 로드

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
TAVILY_API_KEY = os.getenv("TAVILY_API_KEY")
DEBUG = os.getenv("DEBUG", "false").lower() == "true"

if not OPENAI_API_KEY:
    raise ValueError("OPENAI_API_KEY가 설정되지 않았습니다.")

자주 쓰는 패키지 목록

분야패키지용도
LLMopenai, anthropicLLM API 호출
에이전트langchain, langgraph에이전트 프레임워크
벡터 DBchromadb, pinecone-client임베딩 저장·검색
fastapi, uvicornAPI 서버
HTTPrequests, httpxHTTP 클라이언트
데이터pandas, numpy데이터 처리
설정python-dotenv, pydantic환경변수·검증
테스트pytest단위 테스트

실전: 새 프로젝트 시작 체크리스트

# 1. 폴더 생성
mkdir my_project && cd my_project

# 2. 가상환경 생성·활성화
python -m venv venv
source venv/bin/activate  # (또는 Windows: venv\Scripts\activate)

# 3. 필요 패키지 설치
pip install openai python-dotenv

# 4. 설정 파일 생성
touch .env .gitignore requirements.txt

# 5. .gitignore 작성
echo "venv/\n.env\n__pycache__/" > .gitignore

# 6. 의존성 저장
pip freeze > requirements.txt

# 7. 코딩 시작!

pyproject.toml: 현대적 방법

최근에는 requirements.txt 대신 pyproject.toml을 쓰는 추세입니다.

[project]
name = "my-llm-project"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "openai>=1.10.0",
    "langchain>=0.1.9",
    "python-dotenv>=1.0.0",
]
# uv: 빠른 파이썬 패키지 관리자 (pip 대체)
pip install uv

uv init my_project
uv add openai langchain
uv run python main.py

정리

명령어설명
pip install package패키지 설치
pip freeze > req.txt현재 패키지 목록 저장
pip install -r req.txt목록에서 일괄 설치
python -m venv venv가상환경 생성
source venv/bin/activate가상환경 활성화
deactivate가상환경 비활성화

다음 편에서는 HTTP 요청 — requests와 httpx로 외부 API를 호출하는 방법을 배웁니다.

궁금한 점이 있으신가요?

협업·의뢰는 아래로, 가벼운 소통은 인스타그램 @bluefox._.hi도 환영이에요.