직접 만든 코드를 PyPI에 올려 다른 사람이 pip install로 쓰게 만드는 게 「패키지 발행」입니다.
옛날엔 setup.py가 표준이었지만 지금은 pyproject.toml(PEP 621)이 모던 표준.
최소 구조.
mypackage/ 폴더 안에 __init__.py, 그 옆에 pyproject.toml.
pyproject.toml에 [project] name = "mypackage", version = "0.1.0", description = "...", authors = [...], dependencies = ["requests"].
이게 전부.
빌드 시스템.
[build-system] requires = ["hatchling"], build-backend = "hatchling.build".
hatchling 외에 setuptools·flit·pdm·poetry-core 다 가능.
작은 프로젝트는 hatchling이 깔끔.
빌드와 발행.
pip install build twine.
python -m build — dist/ 안에 .whl과 .tar.gz 생성.
twine upload dist/* — PyPI에 업로드(API 토큰 필요).
버저닝.
0.1.0(major.minor.patch).
호환 안 되는 변경 시 major 증가, 기능 추가 minor, 버그 수정 patch.
한 번 발행한 버전은 재업로드 불가능 — 잘못 올리면 0.1.1로 새 버전.
처음 발행은 0.0.1 또는 0.1.0부터.
한 줄 요약
pyproject.toml(PEP 621)이 모던 패키지 표준.
빌드는 hatchling·setuptools, build로 빌드, twine으로 PyPI 업로드.
한 번 발행한 버전은 재업로드 불가.
더 알아볼 것
- setup.py에서 마이그레이션
- semantic versioning
- __init__.py와 패키지 구조