파이썬 생태계의 힘
파이썬이 강력한 이유 중 하나는 방대한 패키지 생태계입니다.
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가 설정되지 않았습니다.")
자주 쓰는 패키지 목록
| 분야 | 패키지 | 용도 |
|---|---|---|
| LLM | openai, anthropic | LLM API 호출 |
| 에이전트 | langchain, langgraph | 에이전트 프레임워크 |
| 벡터 DB | chromadb, pinecone-client | 임베딩 저장·검색 |
| 웹 | fastapi, uvicorn | API 서버 |
| HTTP | requests, httpx | HTTP 클라이언트 |
| 데이터 | 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를 호출하는 방법을 배웁니다.