메뉴 닫기

setup.py로 파이썬 프로젝트를 설치 가능한 패키지로 만드는 방법

setup.py로 파이썬 프로젝트를 설치 가능한 패키지로 만드는 방법

📌 pip install로 설치할 수 있는 나만의 파이썬 패키지를 만들고 배포해보세요

파이썬으로 만든 코드를 다른 사람들과 공유하거나, 다양한 환경에서 재사용하려면 설치 가능한 패키지 형태로 만드는 것이 가장 효율적입니다.
이때 핵심이 되는 파일이 바로 setup.py입니다.
이 파일은 프로젝트에 대한 정보, 설치할 파일, 의존성, 메타데이터 등을 담고 있어서 파이썬 생태계에서 표준적인 패키징 방식으로 사용됩니다.

이 글에서는 setup.py가 왜 중요한지, 어떤 구조로 작성해야 하는지, 그리고 pip install로 설치할 수 있는 배포용 패키지를 만드는 전체 흐름까지 친절하게 안내해드릴게요.
처음 패키징을 시도하는 분들도 따라할 수 있도록 실전 예제를 중심으로 설명드리니, 꼭 끝까지 읽어보시길 바랍니다.



📦 setup.py란 무엇인가요?

setup.py는 파이썬 프로젝트를 설치 가능한 패키지로 만들기 위해 사용하는 설정 파일입니다.
이 파일은 setuptools 또는 distutils와 함께 사용되며, 프로젝트를 배포하거나 pip install로 설치할 수 있도록 만들어주는 핵심 역할을 합니다.

setup.py는 단순히 패키지를 설치하는 것을 넘어, 프로젝트의 이름, 버전, 설명, 라이선스, 작성자, 의존성 등 다양한 정보를 명시할 수 있습니다.
이 정보는 PyPI(Python Package Index)에 업로드할 때도 활용되며, 다른 개발자들이 패키지를 이해하고 활용하는 데 큰 도움이 됩니다.

  • 📁프로젝트의 메타 정보 저장
  • 🔧패키지 설치 방식 정의 가능
  • 🚀pip install로 설치 가능한 구조 생성

💬 setup.py 파일이 있어야만 pip 명령어를 통해 로컬 패키지를 설치하거나, PyPI에 배포할 수 있습니다.

💡 TIP: setup.py는 파이썬 생태계에서 가장 오래된 패키징 방식이며, 현재도 널리 사용되는 표준입니다. 최근에는 pyproject.toml 방식도 병행되고 있지만, setup.py는 여전히 강력한 도구입니다.

📝 setup.py 기본 구조와 필수 항목

setup.py 파일은 setuptools.setup() 함수를 통해 패키지의 설정을 정의합니다.
아래는 가장 기본적인 형태의 setup.py 예제이며, 실제 배포에 필요한 필수 항목들로 구성되어 있습니다.

📌 기본 예제 코드

CODE BLOCK
from setuptools import setup, find_packages

setup(
    name="my_package",
    version="0.1.0",
    description="예제 패키지입니다",
    author="홍길동",
    author_email="hong@example.com",
    packages=find_packages(),
    install_requires=[
        "requests>=2.0.0",
        "numpy==1.24.3"
    ],
)

📌 주요 항목 설명

항목 설명
name 패키지 이름
version 버전 정보
description 패키지 설명
author / author_email 작성자 정보
packages 포함할 서브 패키지 자동 탐색
install_requires 의존 패키지 목록

💡 TIP: find_packages() 함수는 현재 디렉토리 기준으로 __init__.py 파일이 포함된 모든 서브폴더를 자동으로 패키지에 포함시켜 줍니다.



🔧 배포 가능한 패키지 만들기

setup.py를 기반으로 하면 자신의 프로젝트를 누구나 설치 가능한 패키지로 만들 수 있습니다.
이를 위해서는 몇 가지 폴더 구조와 빌드 명령을 이해하고 있어야 하며, Python Packaging Authority(PyPA)의 권장 방식에 따라 진행하는 것이 좋습니다.

패키징 작업은 단순히 파일을 압축하는 것이 아니라, 설치 가능한 메타 정보가 포함된 압축 파일(.whl, .tar.gz)을 만드는 과정입니다.
이 과정을 통해 pip install로 설치하거나, PyPI 업로드가 가능한 상태로 만들 수 있습니다.

📌 패키징 절차

  • 📂setup.py가 포함된 루트 디렉토리 구성
  • 🛠️필요 시 README.md, LICENSE, MANIFEST.in 추가
  • 📦python setup.py sdist bdist_wheel 명령어 실행

📌 dist 디렉토리에 생성된 결과물

위 명령어를 실행하면 dist/ 폴더가 생성되고, 그 안에 .tar.gz(소스 배포용)와 .whl(바이너리 배포용) 파일이 생성됩니다.
이 파일들이 실제로 pip install로 설치 가능한 배포 패키지입니다.

CODE BLOCK
python setup.py sdist bdist_wheel

💎 핵심 포인트:
실행 결과로 생성된 dist 폴더의 파일은 pip install 또는 PyPI 업로드에 직접 사용할 수 있는 공식 설치 파일입니다.

🚀 pip로 설치 가능한 구조 만들기

setup.py를 기반으로 빌드한 패키지는 pip를 사용하여 로컬에서도 설치할 수 있으며, PyPI에 업로드하면 전 세계 누구나 pip install 명령어로 간편하게 설치할 수 있습니다.
이를 위해서는 몇 가지 디렉터리 규칙과 설치 가능한 구조를 갖추는 것이 중요합니다.

📌 pip로 로컬 설치하기

setup.py가 포함된 루트 디렉터리에서 다음 명령어를 입력하면 현재 환경에 패키지가 설치됩니다.

CODE BLOCK
pip install .

또는 아카이브 파일을 직접 설치하고 싶다면, dist 폴더 내 파일명을 지정해서 설치할 수 있습니다.

CODE BLOCK
pip install dist/my_package-0.1.0-py3-none-any.whl

📌 설치 가능한 구조 예시

pip 설치를 위해서는 다음과 같은 디렉터리 구조가 일반적입니다.

CODE BLOCK
my_project/
├── my_package/
   └── __init__.py
├── setup.py
├── README.md
└── requirements.txt

💡 TIP: pip install . 명령은 개발 중에도 빠르게 테스트할 수 있어 매우 유용합니다. 테스트가 끝나면 PyPI 업로드를 통해 전체 공개 설치도 가능합니다.



⚠️ 자주 하는 실수와 해결 방법

setup.py로 패키징을 처음 시도할 때는 사소한 실수 하나로 빌드 오류나 설치 실패가 발생하는 경우가 많습니다.
아래는 많은 개발자들이 경험하는 대표적인 실수들과 그에 대한 해결 방법을 정리했습니다.

📌 실수와 원인

  • 패키지 구조 누락으로 인해 find_packages()가 폴더를 인식하지 못함
  • 📝__init__.py 누락으로 인해 Python 패키지로 인식되지 않음
  • 📦dist 폴더 삭제 없이 재패키징하여 오래된 파일로 설치됨
  • 🔐PyPI 배포 시 버전 중복으로 업로드 실패

📌 해결 방법

위와 같은 문제를 예방하려면 다음 사항을 체크하세요.

💡 TIP: 패키징 전 반드시 python setup.py check 명령어로 유효성 검사를 하고, PyPI 업로드 전에는 dist 폴더를 새로 생성하세요.

⚠️ 주의: PyPI에 동일한 버전의 패키지를 재업로드할 수 없으므로, 항상 새로운 버전 번호로 빌드해야 합니다.

❓ 자주 묻는 질문 (FAQ)

setup.py 없이도 패키징이 가능한가요?
최근에는 pyproject.toml 방식도 사용되지만, setup.py는 여전히 공식 문서와 도구에서 널리 사용되며 가장 호환성이 높습니다.
__init__.py는 꼭 있어야 하나요?
네, 해당 폴더가 파이썬 패키지로 인식되기 위해서는 반드시 필요합니다. 누락되면 find_packages()가 폴더를 인식하지 못합니다.
패키지를 pip install로 설치하려면 꼭 PyPI에 올려야 하나요?
아닙니다. 로컬 디렉토리나 .whl 파일, GitHub 경로를 통해서도 pip install이 가능합니다.
버전 정보는 임의로 작성해도 되나요?
가능하지만 권장되는 형식은 세 자리 숫자 체계(예: 1.0.0)이며, PyPI 배포 시 중복을 방지하기 위해 매번 새로운 버전을 설정해야 합니다.
패키지에 리소스 파일(예: 이미지, txt 등)을 포함하려면?
MANIFEST.in 파일과 setup.py의 include_package_data=True 설정을 함께 사용하면 가능합니다.
패키지를 수정한 뒤에도 같은 버전으로 다시 업로드할 수 있나요?
PyPI는 같은 버전의 패키지를 덮어쓰기 허용하지 않으므로 반드시 버전을 올려야 합니다.
setup.py 없이도 pip install이 가능한 구조는 어떻게 만드나요?
pyproject.toml을 사용하는 새로운 방식이 있으며, Poetry나 Flit 등의 툴을 활용해 설치 가능한 패키지를 만들 수 있습니다.
배포한 패키지를 삭제하거나 수정할 수 있나요?
PyPI에 배포한 패키지는 삭제가 제한되며, 잘못 올렸다면 새 버전을 만들어 업로드해야 합니다. 일부 설정은 관리자에게 요청해야 합니다.

📌 setup.py로 설치 가능한 나만의 파이썬 패키지를 만들어보세요

setup.py는 단순한 설정 파일이 아닙니다.
이 파일을 제대로 활용하면 여러분이 만든 프로젝트를 설치 가능한 형태로 패키징하여 배포하거나, pip install 명령으로 손쉽게 설치할 수 있게 만들 수 있습니다.
setup.py의 기본 구조, 필수 항목, 빌드 절차, 설치 방식까지 모두 이해하면 파이썬 생태계에서 자신의 코드를 효과적으로 공유하고 관리할 수 있게 됩니다.
처음 패키징을 시도하는 분들도 이 글을 바탕으로 step-by-step으로 따라하면 로컬 설치부터 PyPI 배포까지 어렵지 않게 해낼 수 있습니다.
지금 바로 나만의 파이썬 패키지를 만들어 보세요!


🏷️ 관련 태그 : setup.py, 파이썬패키징, pip설치, 파이썬배포, setuptools, python패키지만들기, pypi업로드, 파이썬초보, 프로젝트배포, 파이썬개발