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 패키지 생성
- 최신 버전 의존성 설치
- 빌드 실행
- 생성 결과 확인
pip install --upgrade setuptools wheel
python setup.py sdist bdist_wheel
dist/
├── example-1.0.0-py3-none-any.whl
└── example-1.0.0.tar.gz
3. PyPI 배포
- PyPI 계정 생성: https://pypi.org/
- Twine 설치
- 패키지 업로드
pip install --upgrade twine
twine upload dist/*