머신러닝 프로젝트를 하다 보면, 내 프로젝트를 다른 사람도 쉽게 설치해서 쓸 수 있으면 좋겠다고 느낀다. 그럴 땐 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 연동에도 쉽게 활용할 수 있음.
'Data-Driven System Development > Project Structure' 카테고리의 다른 글
pyproject.toml vs setup.py: 파이썬 패키징 방식의 변화 (0) | 2025.04.05 |
---|---|
파이썬 프로젝트의 템플릿과 패키징, 간단 정리! (0) | 2025.04.05 |
파이썬 프로젝트에서 src/는 왜 쓰는 걸까? 패키지는 어디에 두어야 할까? (0) | 2025.04.05 |
MLOps 프로젝트 디렉토리 구조 – 필수 폴더 vs 선택적 폴더 정리 (0) | 2025.04.02 |
파이썬 MLOps 프로젝트 디렉토리 구조 알아보기 (0) | 2025.04.02 |