728x90
LLMOps를 활용한 LLM 엔지니어링 책을 읽던 중 setup.py 에 대해 알게 되었다.
파이썬 프로젝트에서 의존성을 효율적으로 관리하고, 사용자 정의 모듈을 패키징 할 때 setup.py를 활용하는 것이 좋다고 한다.
setup.py는 프로젝트의 패키지 정보 및 종속성을 정의해서 쉽게 설치할 수 있도록 도와준다고 한다.
내가 본 setup.py는 다음과 같의 구성되어 있었다.
from setuptools import setup, find_packages
setup(
name="llmops_lib",
version="0.1.0",
description="Llmops package",
packages=find_packages(),
install_requires = [
"anthropic==0.39.0",
"faiss-cpu==1.10.0",
"ipykernel==6.29.5",
"langchain==0.3.15",
"langchain-anthropic==0.3.0",
"langchain-ollama==0.2.0",
"langchain-openai==0.3.2",
"langchain-pinecone==0.2.2",
"ollama==0.4.2",
"pinecone==5.4.2",
"ragas==0.2.13",
"streamlit==1.43.2",
"streamlit-aggrid==1.1.1"
],
)
해당 setup.py 파일이 있는 디렉터리에서 아래 명령을 실행하면 파이썬 패키지가 일괄 설치 된다.
이렇게 되면 책과 동일한 환경에서 실습을 진행할 수 있게 된다고 한다.
$ pip install -e .
그렇다면 어떤 원리로 프로젝트의 패키지 정보 및 종속성들이 관리되는 것일까
pip install -e .명령으로 패키지를 설치하면setup.py의setup()함수가 실행된다.- 옵션은 editable mode로
site-packages안에 “원본 위치”를 참조하는 링크(.egg-link파일) 를 만들어줌)
- 옵션은 editable mode로
- 내부적으로
setuptools가 패키지 메타데이터(name,version,dependencies등)를 읽는다. install_requires에 있는 라이브러리를 pip으로 설치한다.- 현재 디렉터리를
site-packages에 심볼릭 링크(참조)로 등록한다- 여기서
site-packages는 파이썬이 외부 라이브러리(pip으로 설치한 패키지들)를 저장하고 불러오는 기본 위치이며python -m site명령어로 해당 위치를 확인할 수 있다.
- 여기서
- 이후
import llmops_lib처럼 프로젝트 내부 모듈을 어디서든 불러올 수 있게 된다.
setup.py 를 알게 되면서 추가로 pyproject.toml 로 패키징/의존성 정의를 하여 활용하는 것이 최근 표준이라는것을 알게되었다.
책으로 공부하는 것 이외에 회사에서 진행하는 프로젝트에서 공용 모듈이 많아져 여러 서비스에서 공유 될 경우가 발생할 것 같은데 이때 pyproject.toml 기반 패키지화를 제안하면 좋을 것 같다는 생각이든다.
728x90