LangChain 챗봇2장 · 개발 환경 준비4 / 20← 이전목차다음 →MetaContents

2장. 개발 환경 준비

pip 와 패키지

새 주방에 도구를 들일 때는 주방용품 도매상에 주문합니다. "냄비 하나 주세요" 하면 냄비 뚜껑과 손잡이까지 한 상자로 옵니다. 다 들인 뒤에는 무엇을 몇 개 들였는지 장부에 적어 둡니다. 다음에 2호점을 낼 때 장부만 보고 똑같이 주문하면 됩니다. 파이썬에서는 pip 가 주문을, PyPI 가 도매상을, requirements.txt 가 장부를 맡습니다.

설치 명령, 내려받기, 상자에 넣기, 목록 적기의 네 단계를 화살표로 이은 pip 설치 흐름도

pip install 이름 을 실행하면 pip 가 PyPI 에서 그 패키지와 의존성을 함께 받아, 켜 둔 가상환경의 site-packages 폴더에 넣습니다. 마지막 상자의 pip freeze 는 설치된 패키지와 판을 목록으로 적어 줍니다. 여기서 도매상이 PyPI, 냄비와 함께 온 뚜껑이 의존성, 장부가 requirements.txt 입니다. 비유와 다른 점은, pip 는 같은 이름의 다른 판이 이미 있으면 말없이 바꿔 끼우기도 한다는 것입니다. 그래서 판을 목록으로 적어 둡니다.

자주 쓰는 pip 명령

PowerShell
# 이 장에서 쓰는 패키지를 설치한다. 의존성(langchain-core, tiktoken 등)도 함께 받는다
pip install langchain langchain-openai python-dotenv
# 설치된 패키지 목록과 판을 본다
pip list
# 한 패키지의 판, 의존성, 설치 위치를 자세히 본다
pip show langchain-openai
# 설치된 패키지를 "이름==판" 꼴로 requirements.txt 에 적는다. > 는 화면 대신 파일로 보내기
pip freeze > requirements.txt
# 목록 파일에 적힌 패키지를 모두 설치한다. -r = requirement file(목록 파일)
pip install -r requirements.txt
# 패키지를 새 판으로 올린다. -U = upgrade(올리기)
pip install -U langchain-openai
명령과 옵션원래 말뜻
pip install 이름install(설치하다)PyPI 에서 받아 가상환경에 설치한다
pip listlist(목록)설치된 패키지와 판을 늘어놓는다
pip show 이름show(보여 주다)한 패키지의 판, 의존성(Requires), 위치를 보여 준다
pip freezefreeze(얼리다, 지금 모습 그대로 굳히다)설치된 것을 이름==판 꼴로 적는다
>redirect(방향 바꾸기)화면에 찍을 글을 파일로 보낸다
-r 파일requirement file목록 파일의 패키지를 모두 설치한다
-Uupgrade이미 있어도 새 판으로 올린다

requirements.txt 의 꼴

출력
langchain==1.4.7
langchain-openai==1.7.3
python-dotenv==1.2.4

== 는 "꼭 이 판"이라는 뜻입니다. >=1.4 처럼 적으면 "1.4 이상이면 아무 판"이 됩니다. 교안의 실행 결과와 똑같이 맞추고 싶으면 == 로 적습니다. 실습 1에서 지금 설치된 판으로 이 꼴의 파일을 직접 만들어 봅니다.

짧은 예시

importlib.metadata 는 파이썬에 들어 있는 묶음으로, 설치된 패키지의 정보를 코드로 읽습니다. pip show 를 코드로 하는 것과 같습니다.

Python
from importlib.metadata import requires, version

# version(이름): 설치된 패키지의 판을 글자로 돌려준다
print("langchain-openai", version("langchain-openai"))
# requires(이름): 그 패키지가 함께 설치되게 한 의존성 목록. 앞의 네 개만 본다
for req in requires("langchain-openai")[:4]:
    print("  필요:", req)
출력
langchain-openai 1.7.3
  필요: certifi>=2024.6.2
  필요: langchain-core<2.0.0,>=1.7.0
  필요: openai>=2.45.0
  필요: tiktoken>=0.7.0

langchain-openai 하나를 설치했는데 langchain-core, openai, tiktoken 이 함께 따라옵니다. langchain-core<2.0.0,>=1.7.0 은 "1.7.0 이상, 2.0.0 미만"이라는 조건입니다. pip 는 이 조건을 맞추는 판을 골라 줍니다.

코드가 의미하는 것

이 코드는 들여 온 냄비 상자를 열어 판 번호와 함께 온 부품 목록을 읽는 일과 같습니다. 판 읽기와 의존성 읽기, 두 가지 동작입니다.

코드하는 일챗봇에서 뜻하는 것
version("langchain-openai")설치된 판을 글자로 돌려준다이 PC 의 챗봇이 어느 판의 부품으로 도는지 확인합니다. 교안과 판이 다르면 결과가 달라질 수 있습니다
requires("langchain-openai")그 패키지가 함께 설치되게 한 패키지와 판의 조건을 돌려준다ChatOpenAI 한 줄 뒤에 openai SDK 와 tiktoken 이 숨어 있다는 것을 보여 줍니다
[:4]목록의 앞 네 개만 자른다의존성 목록이 길어 앞부분만 봅니다. 보지 않은 나머지도 모두 설치되어 있습니다

결과에서 읽을 것은 두 가지입니다.

  • 하나를 들이면 여럿이 따라옵니다. langchain-core, openai, tiktoken 이 함께 적혔습니다. 뒤의 "ChatOpenAI 로 첫 호출" 절에서 보듯 ChatOpenAI 는 안에서 openai SDK 를 대신 불러 줍니다.
  • 조건은 범위로 적힙니다. langchain-core<2.0.0,>=1.7.0 처럼 판의 범위가 정해져 있어, pip 는 이 범위 안에서 판을 고릅니다. 이 PC 의 langchain-openai 는 1.7.3 입니다.

주의할 점

  • 패키지 이름과 불러오는 이름이 다를 때가 있습니다. 설치는 pip install python-dotenv, 코드는 import dotenv 입니다. langchain-openai 는 코드에서 langchain_openai 처럼 빼기(-) 대신 밑줄(_)을 씁니다.
  • 가상환경을 켜지 않고 pip install 을 하면 컴퓨터 전체의 파이썬에 설치됩니다. 줄 앞에 (.venv) 가 있는지 먼저 봅니다.
  • 인터넷의 예제를 따라 패키지를 설치할 때는 이름의 철자를 꼭 확인합니다. 비슷한 이름의 엉뚱한 패키지가 있을 수 있습니다.
← 이전 절2장 · 가상환경다음 절 →2장 · VS Code 에서 가상환경 고르기