시작 전에
환경설정
Windows 11 PC 에서 VS Code 와 Python 으로 실습합니다. 작업 폴더(이 교안의 예시는 C:\chatbot-course)를 하나 정해 그 안에 가상환경을 만들고, 실습에 필요한 패키지를 그 안에 설치합니다. 장이 늘어나면 그 장에서 새로 쓰는 패키지를 이 쪽에 더합니다.
설치하기
- Python 3.12 이상이 설치되어 있는지 확인합니다. 교안은 Python 3.14.6 으로 실행했습니다.
- VS Code 를 설치하고, 확장 프로그램에서 "Python"(Microsoft)을 설치합니다.
- 아래 "작업 폴더 정하기"처럼 작업 폴더
C:\chatbot-course를 만들고, 교안과 함께 받은 실습 파일을 넣은 뒤 VS Code 로 엽니다. - VS Code 의 터미널(보기 → 터미널)을 엽니다. 아래 명령은 모두 이 터미널(PowerShell)에서 실행합니다.
# 파이썬 버전을 확인한다. --version = 판(버전) 보기
python --versionPython 3.14.6작업 폴더 정하기
실습을 시작하기 전에 이 과정에서 쓸 폴더 하나를 정합니다. 요리를 시작하기 전에 조리대 하나를 비워 두고 재료와 도구를 그 위에 모아 두는 것과 같습니다. 여기서 조리대가 작업 폴더이고, 재료가 실습 데이터(data), 도구가 가상환경(.venv)과 패키지 목록(requirements.txt)입니다. 이 교안은 작업 폴더를 C:\chatbot-course 로 정했다고 보고 경로 예시를 적습니다. 이 쪽과 각 장에서 말하는 "과목 폴더"가 이 폴더입니다.
이 경로를 예시로 쓰는 까닭
| 고른 것 | 까닭 |
|---|---|
| C 드라이브 바로 아래 | 경로가 짧아 터미널에서 치기 쉽고, 오류 글에 나온 경로도 읽기 쉽습니다 |
영어 소문자와 - 만 쓴 이름 | 폴더 이름에 한글이나 빈칸이 있으면 일부 도구가 이름을 받지 못합니다. 예를 들어 uv 의 uv init 은 한글 폴더 이름을 프로젝트 이름으로 쓰지 못해 오류를 냅니다(이 쪽 "부록 2" 참고) |
| 바탕화면·OneDrive 폴더가 아닌 곳 | 클라우드 동기화 폴더에서는 동기화하는 동안 파일이 잠기거나, 가상환경의 많은 파일을 함께 올리려 할 수 있습니다 |
다른 경로를 써도 실습에는 지장이 없습니다. 그때는 이 교안의 C:\chatbot-course 를 내 폴더의 경로로 바꿔 읽습니다.
폴더 만들고 열기
PowerShell(Windows 의 명령 창)을 열고 아래를 실행합니다.
# 작업 폴더를 만든다. New-Item = 새 항목 만들기, -ItemType Directory = 폴더로, -Force = 이미 있어도 오류 없이 넘어간다
New-Item -ItemType Directory -Force C:\chatbot-course
# 그 폴더로 옮긴다. cd = change directory(폴더 옮기기)
cd C:\chatbot-course
# 지금 폴더를 VS Code 로 연다. code = VS Code 를 여는 명령, . = 지금 폴더
code .| 명령과 옵션 | 원래 말 | 뜻 |
|---|---|---|
New-Item -ItemType Directory | new item, item type | 새 폴더를 만든다 |
-Force | force(밀어붙이다) | 같은 이름의 폴더가 이미 있어도 멈추지 않는다 |
cd | change directory | 명령을 실행할 폴더를 옮긴다 |
code . | VS Code, 지금 폴더 | 지금 폴더를 VS Code 의 작업 폴더로 연다 |
교안을 만든 PC 에서는 C 드라이브 바로 아래에 폴더를 만들지 않았습니다. 같은 이름의 폴더(chatbot-course)를 임시 폴더 안에 만들어 New-Item -Force 가 두 번 실행해도 오류 없이 넘어가는 것만 확인했습니다. code . 는 VS Code 를 설치할 때 "PATH 에 추가" 항목이 켜져 있어야 동작합니다. 동작하지 않으면 VS Code 에서 파일 → 폴더 열기로 C:\chatbot-course 를 엽니다.
받은 파일 넣기
교안과 함께 받은 실습 파일을 이 폴더에 풀어 넣습니다. 받는 파일은 requirements.txt(패키지 목록), .env.example(API 키 파일의 견본), .gitignore(git 이 올리지 않을 파일 목록), data 폴더(실습 데이터), code 폴더(장마다의 실습 코드)입니다. .env.example 과 .gitignore 는 이름이 점으로 시작해서 파일 탐색기에서 숨겨져 보일 수 있습니다.
이 쪽의 순서를 다 마치면 작업 폴더는 아래 모양이 됩니다. .venv 는 "가상환경 만들기"에서, .env 는 "API 키 넣기"에서 생깁니다.
C:\chatbot-course
├─ .venv\ 가상환경(설치한 패키지가 들어가는 곳)
├─ .env API 키 파일(남에게 보내지 않는다)
├─ .env.example .env 의 견본
├─ .gitignore git 이 올리지 않을 파일 목록
├─ requirements.txt 패키지 목록
├─ data\ 실습 데이터. 실습 코드는 여기서 실행한다
└─ code\ 장마다의 실습 코드(ch01, ch02, …)가상환경 만들기
가상환경(virtual environment)은 과목마다 따로 쓰는 패키지 상자입니다. 다른 과목의 패키지와 판이 섞이지 않습니다. 가상환경과 설치를 더 빠른 도구 uv 로 하고 싶으면 이 쪽 끝의 "부록 1. uv 소개"와 "부록 2. uv 로 환경설정하기"를 봅니다.
# venv(virtual environment) 모듈로 .venv 라는 이름의 가상환경을 만든다. -m = module(모듈로 실행)
python -m venv .venv
# 가상환경을 켠다. 켜지면 줄 앞에 (.venv) 가 붙는다
.\.venv\Scripts\Activate.ps1| 명령과 옵션 | 원래 말 | 뜻 |
|---|---|---|
python -m venv .venv | module, virtual environment | venv 모듈을 실행해 .venv 폴더에 가상환경을 만든다 |
Activate.ps1 | activate(켜다), PowerShell 스크립트 | 이 터미널에서 가상환경의 파이썬과 pip 를 쓰게 한다 |
deactivate | deactivate(끄다) | 가상환경을 끈다 |
패키지 설치하기
과목 폴더에 있는 requirements.txt 로 과정 내내 쓰는 패키지를 한 번에 설치합니다. 이 파일에는 설치할 패키지와 판(version)이 한 줄에 하나씩 이름==판 꼴로 적혀 있습니다. 장보기 목록을 들고 가면 하나하나 떠올리지 않아도 같은 물건을 사 오는 것처럼, 누가 설치해도 교안을 만든 PC 와 같은 판이 들어옵니다. 판까지 맞춰 두어야 실습 출력이 원고와 같게 나옵니다.
가상환경을 켠 채로, 과목 폴더(requirements.txt 가 있는 곳, 예: C:\chatbot-course)에서 실행합니다.
# pip 를 먼저 새 판으로 올린다. -m = module(모듈로 실행), -U = upgrade(올리기)
python -m pip install -U pip
# requirements.txt 에 적힌 패키지를 적힌 판 그대로 설치한다. -r = requirement file(목록 파일)
pip install -r requirements.txt
# 설치된 패키지끼리 판이 서로 맞는지 점검한다
pip check교안을 만든 PC 에서 새 가상환경을 만들어 실행했을 때 마지막 pip check 가 찍은 줄입니다. 이 줄이 나오면 설치가 끝난 것입니다.
No broken requirements found.| 명령과 옵션 | 원래 말 | 뜻 |
|---|---|---|
pip | Package Installer for Python | PyPI(Python Package Index)에서 패키지를 받아 설치한다 |
-m | module | 지금 켠 가상환경의 파이썬으로 pip 모듈을 실행한다 |
-U | upgrade | 이미 있는 패키지를 새 판으로 올린다 |
-r requirements.txt | requirement file | 파일에 적힌 목록을 읽어 한꺼번에 설치한다 |
pip check | check(점검하다) | 패키지끼리 필요한 판이 어긋난 곳이 없는지 본다 |
requirements.txt 는 아래처럼 장별로 묶여 있습니다. # 로 시작하는 줄은 설명이라 pip 가 읽지 않습니다.
# 1~4차시: LangChain, OpenAI 연결, 키 읽기, 토큰 세기, 표와 그래프
langchain==1.4.7
langchain-core==1.7.3
langchain-openai==1.7.3
openai==3.42.1
pydantic==2.14.2
python-dotenv==1.2.4
tiktoken==0.14.0
numpy==2.5.4
pandas==3.1.0
matplotlib==3.11.2
# 5차시: 도구 연동과 MCP 서버
mcp==1.30.0
langchain-mcp-adapters==0.3.2
# 6차시: PDF 읽기, 텍스트 나누기, FAISS 벡터DB, RetrievalQA
langchain-community==0.4.2
langchain-text-splitters==1.1.3
langchain-classic==1.0.8
pypdf==6.21.4
faiss-cpu==1.15.1
# 7차시: 웹 화면
streamlit==1.66.1- 판을 고정했기 때문에 Python 판이 너무 새것이거나 오래되면 맞는 설치 파일이 없다는 오류가 날 수 있습니다. 교안은 Python 3.14.6 에서 위 목록이 오류 없이 설치되는 것을 확인했습니다. 다른 Python 판에서 설치가 막히면 아래 "자주 나는 오류"를 봅니다.
- 이 목록에는 직접 쓰는 패키지만 적었습니다. 그 패키지가 필요로 하는 다른 패키지(의존성)는 pip 가 알아서 함께 설치합니다.
- 내 PC 에 설치된 것을 목록으로 남기는 법(
pip freeze)과 목록 파일의 꼴은 2장 "pip 와 패키지" 절에서 자세히 봅니다.
목록의 패키지가 쓰이는 곳은 아래와 같습니다.
| 패키지 | 쓰는 곳 |
|---|---|
langchain, langchain-core | 메시지, 프롬프트, 가짜 모델(1장 실습 5)과 체인(3장부터) |
openai, pydantic | OpenAI 공식 라이브러리(2장), 칸과 조건을 정하는 틀(4장) |
langchain-openai | OpenAI 모델을 LangChain 에 꽂아 쓰기(2장부터) |
python-dotenv | .env 파일에서 API 키 읽기(2장부터) |
tiktoken | 토큰 세기(1장 실습 3, 실습 5, 프로젝트) |
numpy, pandas, matplotlib | 표 다루기와 그래프(1장 실습 전체) |
mcp, langchain-mcp-adapters | MCP(Model Context Protocol) 서버 만들기와, 그 도구를 LangChain 에 붙이기(5장) |
langchain-community, pypdf | PDF 읽기(PyPDFLoader)와 FAISS 벡터 저장소 연결(6장, 7장) |
langchain-text-splitters | 긴 글을 조각으로 나누기(6장) |
faiss-cpu | 벡터DB FAISS(Facebook AI Similarity Search). CPU 로 도는 판(6장, 7장) |
langchain-classic | 옛 방식의 체인 RetrievalQA(6장) |
streamlit | 파이썬으로 만드는 웹 화면(7장) |
API 키 넣기
2장부터는 교수자가 나눠 준 OpenAI API 키로 진짜 모델을 부릅니다. 키는 코드에 적지 않고 과목 폴더의 .env 파일(예: C:\chatbot-course\.env)에 넣습니다. 과목 폴더에 견본 .env.example 이 있습니다. 아래 명령은 과목 폴더에서 실행합니다.
# 견본을 복사해 .env 를 만든다. Copy-Item = 파일 복사
Copy-Item .env.example .env
# 메모장으로 열어 "발급받은_인증키" 자리에 키를 붙여 넣고 저장한다
notepad .envOPENAI_API_KEY=발급받은_인증키
OPENAI_MODEL=gpt-4.1-miniOPENAI_MODEL줄은 없어도 됩니다. 없으면 실습 코드가gpt-4.1-mini를 씁니다. 교수자가 다른 모델을 정했으면 그 이름을 적습니다..env는 남에게 보내거나 깃허브에 올리지 않습니다. 과목 폴더의.gitignore에.env가 들어 있어 git 이 올리지 않습니다.- 키를 읽는 방법과 까닭은 2장 "환경 변수와 .env" 절에서 자세히 봅니다.
VS Code 에서 가상환경 고르기
VS Code 가 .venv 의 파이썬을 쓰게 합니다. Ctrl+Shift+P 로 명령 창을 열고 Python: Select Interpreter 를 고른 뒤 .venv 가 들어간 항목을 고릅니다. 메뉴 이름은 VS Code 판에 따라 조금 다를 수 있습니다.
실행 확인하기
아래 코드를 check_env.py 로 저장하고 python check_env.py 로 실행합니다. 패키지의 판을 찍고, tiktoken 과 LangChain 의 가짜 모델이 돌아가는지 봅니다. tiktoken 은 처음 실행할 때 토큰 사전을 인터넷에서 받아 오므로 인터넷이 연결되어 있어야 합니다.
import sys
from importlib.metadata import version
print("Python", sys.version.split()[0])
for name in ["langchain", "langchain-core", "langchain-openai", "openai", "python-dotenv", "tiktoken", "numpy", "pandas", "matplotlib",
"mcp", "langchain-mcp-adapters", "langchain-community", "langchain-text-splitters", "langchain-classic",
"pypdf", "faiss-cpu", "streamlit"]:
print(f"{name:25} {version(name)}")
import tiktoken
from langchain_core.language_models.fake_chat_models import FakeListChatModel
enc = tiktoken.get_encoding("o200k_base")
print("토큰 수:", len(enc.encode("안녕하세요")))
print("가짜 모델:", FakeListChatModel(responses=["준비 완료"]).invoke("안녕").content)교안을 만든 PC 에서 실행한 결과입니다. 판 숫자는 설치한 때에 따라 달라도 괜찮습니다.
Python 3.14.6
langchain 1.4.7
langchain-core 1.7.3
langchain-openai 1.7.3
openai 3.42.1
python-dotenv 1.2.4
tiktoken 0.14.0
numpy 2.5.4
pandas 3.1.0
matplotlib 3.11.2
mcp 1.30.0
langchain-mcp-adapters 0.3.2
langchain-community 0.4.2
langchain-text-splitters 1.1.3
langchain-classic 1.0.8
pypdf 6.21.4
faiss-cpu 1.15.1
streamlit 1.66.1
토큰 수: 2
가짜 모델: 준비 완료실습 코드를 실행하는 곳
실습 코드는 과목 폴더의 data 폴더(예: C:\chatbot-course\data)에서 실행한다고 보고 썼습니다. 파일 이름만 적어 읽기 때문입니다. 터미널에서 cd data 로 들어간 뒤 실행하거나, code/ch01/ 의 실습 파일을 data 폴더에서 실행합니다.
# cd = change directory(폴더 옮기기). 과목 폴더에 있다면 cd data 만 쳐도 된다
cd C:\chatbot-course\data
# 1장 실습 1의 코드를 실행한다
python ..\code\ch01\lab1.py자주 나는 오류
| 오류 글 | 까닭 | 해결 |
|---|---|---|
Activate.ps1 cannot be loaded because running scripts is disabled | PowerShell 이 스크립트 실행을 막아 두었다 | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 를 한 번 실행한 뒤 다시 켠다. 회사 PC 라면 관리자에게 먼저 묻는다 |
code : 'code' 용어가 … 인식되지 않습니다 | VS Code 를 설치할 때 "PATH 에 추가"를 켜지 않았다 | VS Code 에서 파일 → 폴더 열기로 C:\chatbot-course 를 연다 |
ERROR: Could not open requirements file | 과목 폴더가 아닌 곳(예: data)에서 실행했다 | cd .. 로 requirements.txt 가 있는 과목 폴더로 가서 다시 실행한다 |
ERROR: No matching distribution found for … | 지금 Python 판에 맞는 그 패키지 판의 설치 파일이 없다 | python --version 을 보고 Python 3.12 이상인지 확인한다. 그래도 막히면 그 줄의 ==판 을 지워 맞는 판을 받게 한다. 이때는 출력이 원고와 조금 다를 수 있다 |
ModuleNotFoundError: No module named 'langchain_core' | 가상환경을 켜지 않고 실행했거나, 다른 파이썬으로 실행했다 | 줄 앞에 (.venv) 가 있는지 보고, 없으면 가상환경을 켠 뒤 다시 실행한다. VS Code 오른쪽 아래에서 인터프리터를 .venv 로 고른다 |
FileNotFoundError: ... 'faq.csv' | data 폴더가 아닌 곳에서 실행했다 | cd data 로 들어가서 실행한다 |
FileNotFoundError: ... 'out_next_word.json' | 앞 실습이 만드는 파일이 아직 없다 | 1장 실습 2를 먼저 실행한다 |
tiktoken 에서 연결 오류(ConnectionError 등) | 토큰 사전을 처음 받을 때 인터넷이 끊겨 있었다 | 인터넷을 연결하고 다시 실행한다. 한 번 받으면 다음부터는 PC 에 저장된 것을 쓴다 |
ImportError: cannot import name 'ChatOpenAI' from 'langchain.chat_models' | 옛 판의 예제 코드를 따라 했다 | 지금 판에서는 from langchain_openai import ChatOpenAI 로 부른다 |
OpenAIError: ... Missing credentials 또는 api_key client option must be set | 키를 읽지 못했다 | 과목 폴더에 .env 가 있는지, 줄이 OPENAI_API_KEY= 로 시작하는지, 코드가 load_dotenv(find_dotenv(usecwd=True)) 를 먼저 부르는지 본다 |
AuthenticationError(401) | 키가 틀렸거나 지워졌다 | 키를 다시 붙여 넣는다. 앞뒤 빈칸과 따옴표가 섞이지 않았는지 본다 |
RateLimitError(429) | 너무 자주 부르거나 사용 한도를 넘었다 | 잠시 쉬고 다시 부른다. 계속되면 교수자에게 알린다 |
NotFoundError(404) | 모델 이름이 틀렸거나 그 계정에서 쓸 수 없는 모델이다 | .env 의 OPENAI_MODEL 철자를 보거나 줄을 지운다 |
부록 1. uv 소개
지금까지는 파이썬에 들어 있는 venv 로 가상환경을 만들고 pip 로 패키지를 설치했습니다. 같은 일을 더 빠르게, 한 도구로 해 주는 것이 uv 입니다. 이 부록은 골라 쓰는 길입니다. 앞의 방법으로 이미 환경을 갖췄다면 건너뛰어도 실습에는 지장이 없습니다.
장보기에 빗대 보겠습니다. 앞에서 한 방법은 장바구니(venv)를 따로 챙기고, 장보기 목록(requirements.txt)을 들고 가게(PyPI)를 돌며 물건을 하나씩 담는(pip) 일입니다. uv 는 목록만 건네면 장바구니를 챙기는 일부터 물건을 담는 일까지 한꺼번에 해 주는 장보기 대행입니다. 한 번 산 물건은 집 창고(캐시, cache)에 쌓아 두었다가, 다음에 같은 물건이 필요하면 가게에 가지 않고 창고에서 꺼내 씁니다. 여기서 장바구니가 가상환경, 목록이 requirements.txt, 대행이 uv, 집 창고가 uv 의 내려받기 캐시입니다. 비유와 다른 점은, uv 는 물건을 사 오기 전에 목록의 물건끼리 서로 맞는지(판이 어긋나지 않는지)를 먼저 따져 본다는 것입니다.
왼쪽 파랑 상자가 앞에서 한 방법, 가운데 보라 상자가 명령 앞에 uv 만 붙이는 방법, 오른쪽 하늘 상자가 uv 의 프로젝트 기능으로 관리하는 방법입니다. 세 방법 모두 과목 폴더의 같은 requirements.txt 를 읽으므로 설치되는 패키지와 판은 같습니다.
uv 는 무엇인가
| 항목 | 내용 |
|---|---|
| 만든 곳 | Astral. 파이썬 코드 검사 도구 Ruff 를 만든 회사입니다 |
| 만든 언어 | 러스트(Rust). 파이썬으로 짠 pip 와 달리, 컴퓨터가 바로 실행하는 프로그램으로 만들어졌습니다 |
| 하는 일 | 공식 문서의 소개는 "파이썬 패키지와 프로젝트를 관리하는 아주 빠른 도구"입니다. 가상환경 만들기, 패키지 설치, 파이썬 판 설치, 프로젝트 관리를 한 도구로 합니다 |
| 대신하는 도구 | 공식 문서는 pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv 등을 대신한다고 적습니다 |
| 빠르기 | 공식 문서는 "pip 보다 10~100배 빠르다"고 적습니다. 만든 곳이 잰 값이고, 패키지와 캐시 상태, 인터넷 속도에 따라 달라집니다. 이 교안은 따로 견주어 재지 않았습니다 |
| 이름 | 이름 "uv" 의 뜻이나 유래는 공식 문서에 밝혀져 있지 않습니다 |
pip 와 uv 견주기
| 하는 일 | 파이썬 기본 도구 | uv |
|---|---|---|
| 가상환경 만들기 | python -m venv .venv | uv venv |
| 목록으로 설치하기 | pip install -r requirements.txt | uv pip install -r requirements.txt |
| 판이 맞는지 점검하기 | pip check | uv pip check |
| 설치된 목록 보기 | pip list | uv pip list |
| 가상환경의 파이썬으로 실행하기 | 가상환경을 켠 뒤 python 파일.py | uv run python 파일.py(켜지 않아도 된다) |
| 파이썬 자체 설치 | python.org 에서 받아 설치 | uv python install 3.14 |
uv 를 쓰는 두 가지 방식
- uv pip 방식: 지금까지의 명령 앞에
uv만 붙입니다.requirements.txt를 그대로 쓰고 새로 익힐 것이 거의 없습니다. 이 과정에는 이 방식을 권합니다. - uv 프로젝트 방식:
uv init으로 프로젝트 설명서pyproject.toml을 만들고,uv add로 패키지를 더합니다. uv 는 설치한 모든 패키지의 정확한 판을 잠금 파일(lock file, 판을 잠가 두는 파일)uv.lock에 적어 두고, 다른 PC 에서는uv sync한 번으로 똑같은 환경을 다시 만듭니다. 내 챗봇을 따로 저장소로 꾸려 배포할 때 알맞습니다.
주의할 점
- uv 가 만든 가상환경에는
pip가 들어 있지 않습니다. 이 가상환경에서는pip install대신uv pip install을 씁니다. 교안을 만든 PC 에서uv venv로 만든.venv\Scripts를 보니 pip 파일이 하나도 없었습니다. - 한 가상환경에
pip와uv를 섞어 쓰지 않는 편이 안전합니다. 한 가지 방법을 정해 끝까지 씁니다. - uv 는 파이썬과 따로 설치하는 프로그램입니다. 교실 PC 에 프로그램 설치가 막혀 있으면 앞의
venv와pip방법을 씁니다.
부록 2. uv 로 환경설정하기
uv 를 설치하고, 과목 폴더의 requirements.txt 로 가상환경을 갖추는 순서입니다. 아래 출력은 교안을 만든 PC(Windows 11, uv 0.12.23, Python 3.14.6)에서 과목 폴더를 본뜬 빈 폴더에 실제로 실행해 얻은 것입니다. 걸린 시간은 이미 받아 둔 캐시가 있는 상태에서 잰 것이라, 처음 설치하는 PC 에서는 더 걸립니다.
uv 설치하기
아래 셋 가운데 하나로 설치합니다. 명령은 uv 공식 문서(docs.astral.sh/uv)의 설치 쪽에 적힌 것입니다. 교안을 만든 PC 에는 uv 가 이미 설치되어 있어서, 이 블록은 실행하지 않았습니다.
# 방법 1. 공식 설치 스크립트. irm = Invoke-RestMethod(주소의 내용을 받아 오기), iex = Invoke-Expression(받은 글을 명령으로 실행)
# -ExecutionPolicy ByPass = 이 한 번만 스크립트 실행 제한을 건너뛴다
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 방법 2. Windows 의 패키지 관리자 winget 으로 설치. --id = 설치할 프로그램의 이름표, -e = exact(이름이 정확히 같은 것만)
winget install --id=astral-sh.uv -e
# 방법 3. 이미 있는 파이썬의 pip 로 설치
pip install uv설치한 뒤에는 터미널을 새로 열고 판을 확인합니다. 설치 스크립트는 uv 를 사용자 폴더의 .local\bin 에 넣는데, 이미 열려 있던 터미널은 그 위치를 모를 수 있기 때문입니다.
# uv 의 판을 확인한다
uv --versionuv 0.12.23 (46b84fd0b 2026-10-03 x86_64-pc-windows-msvc)방법 1. requirements.txt 로 설치하기 (uv pip)
과목 폴더에서 실행합니다. 가상환경을 켜지 않아도 uv 가 지금 폴더의 .venv 를 찾아 씁니다.
# 과목 폴더에 .venv 가상환경을 만든다. --python 3.14 = 이 판의 파이썬으로 만든다(없으면 uv 가 받아 온다)
uv venv --python 3.14Using CPython 3.14.6 interpreter at: C:\Users\사용자\AppData\Local\Programs\Python\Python314\python.exe
Creating virtual environment at: .venv
Activate with: .venv\Scripts\activate첫 줄의 경로는 PC 마다 다릅니다. 위 출력에서는 사용자 이름을 사용자 로 바꿔 적었습니다.
# requirements.txt 에 적힌 패키지를 적힌 판 그대로 .venv 에 설치한다. -r = requirement file
uv pip install -r requirements.txtResolved 98 packages in 213ms
Installed 98 packages in 18.73s
+ aiohappyeyeballs==2.7.1
...Resolved 는 목록의 패키지 18개와, 그 패키지들이 필요로 하는 의존성까지 모두 98개의 판을 맞춰 정했다는 뜻입니다. Installed 는 실제로 설치했다는 뜻입니다. 그 아래로 설치한 패키지가 + 이름==판 꼴로 98줄 이어지는데, 여기서는 첫 줄만 남기고 줄였습니다.
# 설치된 패키지끼리 판이 서로 맞는지 점검한다
uv pip check
# 실행 확인 코드(위 "실행 확인하기"의 check_env.py)를 .venv 의 파이썬으로 돌린다. 가상환경을 켜지 않아도 된다
uv run python check_env.pyChecked 98 packages in 19ms
All installed packages are compatible
Python 3.14.6
langchain 1.4.7
langchain-core 1.7.3
...
토큰 수: 2
가짜 모델: 준비 완료All installed packages are compatible 는 pip 의 No broken requirements found. 와 같은 뜻입니다. 실행 확인 코드의 출력은 위 "실행 확인하기"와 같아서 중간을 줄였습니다. 실습 코드도 cd data 로 들어간 뒤 uv run python ..\code\ch01\lab1.py 처럼 실행합니다. 가상환경을 켜고(.\.venv\Scripts\Activate.ps1) 평소처럼 python 으로 실행해도 됩니다.
방법 2. 프로젝트로 관리하기 (uv init, uv add)
requirements.txt 의 목록을 uv 프로젝트로 옮깁니다. 과목 폴더(C:\chatbot-course)에서 실행합니다. uv init 은 폴더 이름을 프로젝트 이름으로 씁니다. 교안을 만든 PC 에서 chatbot-course 라는 이름의 폴더에 실행했더니 프로젝트 이름이 chatbot-course 가 됐습니다.
# 프로젝트 설명서 pyproject.toml 만 만든다. --bare = 예제 파일 없이 설명서만, --python 3.14 = 이 판의 파이썬을 쓴다
uv init --bare --python 3.14
# requirements.txt 의 패키지를 프로젝트에 더한다. -r = requirement file. .venv 와 uv.lock 이 함께 생긴다
uv add -r requirements.txtInitialized project `chatbot-course`
Using CPython 3.14.6 interpreter at: C:\Users\사용자\AppData\Local\Programs\Python\Python314\python.exe
Creating virtual environment at: .venv
Resolved 100 packages in 430ms
Installed 98 packages in 15.05s위 출력은 두 번의 시험을 이어 붙인 것입니다. 첫 줄은 chatbot-course 폴더에서, 나머지는 같은 requirements.txt 로 다른 빈 폴더에서 실행한 결과입니다. 작업 폴더를 한글 이름으로 정했다면 uv init 이 폴더 이름을 프로젝트 이름으로 쓰지 못해 아래 오류가 납니다. 그때는 uv init --bare --python 3.14 --name chatbot-course 처럼 --name 으로 영어 이름을 따로 줍니다.
error: The current directory (`챗봇_AI교안`) is not a valid package name. Please provide a package name with `--name`.uv add 가 끝나면 pyproject.toml 의 dependencies 에 목록의 패키지 18개가 판까지 적힙니다. 앞부분은 이렇습니다.
[project]
name = "chatbot-course"
version = "0.1.0"
requires-python = ">=3.14"
dependencies = [
"faiss-cpu==1.15.1",
"langchain==1.4.7",
...
]# 프로젝트 환경이 pyproject.toml·uv.lock 과 맞는지 보고, 다르면 맞춘다
uv sync
# 프로젝트 환경의 파이썬으로 실행한다
uv run python check_env.pyResolved 100 packages in 2ms
Checked 98 packages in 19ms
...
토큰 수: 2
가짜 모델: 준비 완료다른 PC 에서는 pyproject.toml 과 uv.lock 이 든 폴더에서 uv sync 한 번이면 같은 판의 환경이 만들어집니다. uv.lock 은 uv 가 쓰는 파일이므로 손으로 고치지 않습니다. 이후 패키지를 더할 때는 uv add 이름 을 쓰면 pyproject.toml 과 uv.lock 이 함께 고쳐집니다.
명령과 옵션
| 명령과 옵션 | 원래 말 | 뜻 |
|---|---|---|
uv venv | virtual environment | 지금 폴더에 .venv 가상환경을 만든다 |
--python 3.14 | python version | 이 판의 파이썬으로 만든다. PC 에 없으면 uv 가 받아 온다 |
--clear | clear(비우다) | 이미 있는 .venv 를 지우고 새로 만든다 |
uv pip install -r | requirement file | 목록 파일대로 설치한다. pip 와 쓰는 법이 같다 |
uv pip check | check(점검하다) | 패키지끼리 판이 맞는지 본다 |
uv run | run(실행하다) | 가상환경을 켜지 않고 그 환경의 파이썬으로 명령을 실행한다 |
uv init --bare | initialize(처음 차리다) | 예제 파일 없이 pyproject.toml 만 만든다. 프로젝트 이름은 폴더 이름을 쓰고, --name 으로 따로 줄 수 있다 |
uv add | add(더하다) | 패키지를 프로젝트에 더하고 uv.lock 과 환경을 고친다 |
uv sync | synchronize(맞추다) | 환경을 uv.lock 과 똑같이 맞춘다 |
uv python install | install(설치하다) | 파이썬 자체를 판을 골라 설치한다. 이 교안에서는 실행하지 않았다 |
uv 를 쓸 때 자주 나는 오류
| 오류 글 | 까닭 | 해결 |
|---|---|---|
'uv' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다 | 설치 전에 열어 둔 터미널이 uv 의 위치를 모른다 | 터미널(VS Code 라면 VS Code 전체)을 닫았다가 다시 연다 |
Failed to create virtual environment 와 A virtual environment already exists at: .venv | 앞에서 만든 .venv 가 이미 있다 | 그 가상환경을 그대로 쓰거나, uv venv --clear --python 3.14 로 새로 만든다 |
No module named pip | uv 가 만든 가상환경에서 python -m pip 를 썼다 | uv pip install … 로 설치한다 |
is not a valid package name | 폴더 이름이 한글이라 프로젝트 이름으로 쓸 수 없다 | uv init --bare --python 3.14 --name chatbot-course 처럼 이름을 따로 주거나, 작업 폴더를 C:\chatbot-course 처럼 영어 이름으로 만든다 |
VS Code 가 패키지를 못 찾는다(ModuleNotFoundError) | VS Code 가 다른 파이썬을 쓰고 있다 | 앞의 "VS Code 에서 가상환경 고르기"처럼 .venv 의 파이썬을 고른다. uv 가 만든 .venv 도 같은 자리에 있다 |