Python 패키지 생성 및 PyPI에 업로드하기

1. 기본 개념

Python 개발 시 외부 라이브러리 활용이 필수적입니다. 데이터 처리, 네트워크 통신 등 다양한 기능을 제공하는 패키지를 제작하여 공유하는 것이 중요합니다. 이는 모듈화를 통해 코드 재사용성을 높이고 프로젝트 간 호환성을 확보하는 목적입니다. 대부분의 Python 패키지는 PyPI(python package index)에서 다운로드되며, 아래에서는 자체 패키지를 생성하고 PyPI에 배포하는 방법을 설명합니다.

2. PyPI 패키지 생성 절차

패키징 전 반드시 README.md, LICENSE(선택 사항), setup.py 파일이 존재해야 합니다. 각각은 문서화, 라이선스 정보, 설치 구성 스크립트 역할을 수행합니다.

2.1 setup.py 구조

설치 시 필요한 메타데이터와 패키지 구성 정보를 정의합니다. 다음은 예시 코드:

import os
from setuptools import setup, find_packages

current_dir = os.path.abspath(os.path.dirname(__file__))

try:
    with open(os.path.join(current_dir, 'README.md'), 'r', encoding='utf-8') as f:
        description = f.read()
except Exception as e:
    description = "기본 설명문"

setup(
    name="example-cli",
    version="1.0.0",
    keywords=["cli", "tool", "utility"],
    description="명령행 도구",
    long_description=description,
    long_description_content_type='text/markdown',
    python_requires=">=3.7",
    license="MIT License",

    url="https://github.com/developer/example-cli",
    author="개발자명",
    author_email="dev@example.com",

    packages=find_packages(),
    include_package_data=True,
    install_requires=["requests", "click"],
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: MIT License"
    ],
    entry_points={
        'console_scripts': [
            'example-cli=example:main'
        ]
    }
)

핵심 요소 설명:

  • name: 유일한 패키지 이름 (알파벳, 숫자, 하이픈만 허용)
  • version: 버전 관리 (Seminor 방식 사용 권장)
  • classifiers: 호환되는 파이썬 버전, 라이선스 등 메타정보 설정
  • entry_points: CLI 명령어 자동 생성

2.2 디렉토리 구조

├── LICENSE
├── README.md
├── example
│   ├── __init__.py
│   ├── cli.py
│   ├── utils.py
│   └── core.py
├── setup.py
└── build.sh

2.3 패키지 생성

  1. 최신 버전 의존성 설치
  2. pip install --upgrade setuptools wheel
    
  3. 빌드 실행
  4. python setup.py sdist bdist_wheel
    
  5. 생성 결과 확인
  6. dist/
    ├── example-1.0.0-py3-none-any.whl
    └── example-1.0.0.tar.gz
    

3. PyPI 배포

  1. PyPI 계정 생성: https://pypi.org/
  2. Twine 설치
  3. pip install --upgrade twine
    
  4. 패키지 업로드
  5. twine upload dist/*
    

태그: python PyPI setuptools Twine package management

7월 3일 03:09에 게시됨