Data-Driven System Development/Project Structure

MLOps 프로젝트를 패키지로 만들기 – setup.py 완전 이해하기

Data Jun 2025. 4. 2. 16:07

머신러닝 프로젝트를 하다 보면, 내 프로젝트를 다른 사람도 쉽게 설치해서 쓸 수 있으면 좋겠다고 느낀다. 그럴 땐 setup.py를 활용해 프로젝트를 Python 패키지처럼 설치 가능하게 만들 수 있다!

 

setup.py는 어떤 역할을 할까?

  • 프로젝트를 pip install . 명령어로 설치 가능하게 해주는 설정 파일
  • 즉, 내 프로젝트를 하나의 패키지로 포장해주는 설계도 같은 역할을 한다.

예시 디렉토리 구조

MlopsStudy/
├── src/
│   └── mlopsstudy/          # 실제 패키지 코드 위치
│       ├── __init__.py
│       ├── ml_pipeline.py
│       └── utils.py
├── setup.py
├── README.md
├── requirements.txt

여기서 src/ 내부에 실제 코드가 있고, setup.py는 루트에 위치함.

 

예시 setup.py 코드 설명

from setuptools import setup, find_packages

# README.md 읽어서 long description에 넣기
with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setup(
    name="mlopsstudy",  # 패키지 이름
    version="0.1",  # 초기 버전
    packages=find_packages(where='src'),  # src 폴더 내 패키지 검색
    package_dir={'': 'src'},  # 루트 패키지는 src 기준으로 찾음
    install_requires=[
        'scikit-learn>=1.0',
        'pandas>=1.3',
        'numpy>=1.21',
    ],
    author="김지효",
    author_email="your_email@example.com",
    description="A Machine Learning pipeline project focused on MLOps",
    long_description=long_description,
    long_description_content_type='text/markdown',
    url="https://github.com/your_username/mlopsstudy",
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License",
        "Operating System :: OS Independent",
    ],
    python_requires='>=3.8',
)

 

주요 항목 설명

find_packages(where='src')는 패키지를 찾는 기준,
package_dir={'': 'src'}는 찾은 패키지가 실제 어디에 위치해 있는지 알려주는 기준이야.

예시 비교

❌ 이게 없으면?

package_dir={'': 'src'}

설치 후 import src.mypackage처럼 해야 되는 상황이 생길 수도 있어.

✅ 있으면?

package_dir={'': 'src'}

설치 후 바로 import mypackage처럼 사용 가능!

 

설치 방법

프로젝트 루트에서 다음 명령어 실행:

pip install .

이러면 src/mlopsstudy/ 안의 코드가 로컬 패키지로 설치된다.
이후 어디서든 import mlopsstudy로 사용 가능!

 

정리

  • setup.py는 프로젝트를 재사용 가능한 패키지로 포장해주는 필수 설정 도구!
  • MLOps나 협업 프로젝트에서는 배포성과 유지보수성 향상에 도움이 된다.
  • 한 번 만들어두면 테스트, 배포, CI/CD 연동에도 쉽게 활용할 수 있음.