본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

Wheel과 PyPI — 소스 밖에서 설치되는지 증명하기

~15 min · pypi, wheel, publishing, twine

Level 0호기심
0 XP0/93 lessons0/23 achievements
0/100 XP to next level100 XP to go0% complete

PyPI는 pip의 기본 공개 색인이고, wheel은 설치 때 옛 setup 코드를 실행하지 않고 정해진 배치대로 파일을 놓는 zip 기반 배포물이야. 순수 Python은 범용 wheel을 만들 수 있지만 C 확장은 운영체제·Python·아키텍처별 wheel이 필요해.

python -m build로 wheel과 sdist를 만들고 TestPyPI에서 먼저 시험한 뒤 twine으로 공개할 수 있어. 이미 올린 버전 파일은 고쳐 덮는 게 아니라 새 버전을 내야 해.

소스 디렉터리에서는 우연히 주변 파일을 읽을 수 있어. 깨끗한 환경에 wheel만 설치해 import·CLI·메타데이터를 확인해야 배포물을 증명한 거야.

Code

wheel과 sdist 만들기·bash
# 빌드 도구 설치
pip install build

# pyproject.toml 있는 프로젝트에서
python -m build

# 결과:
# dist/
#   my_package-0.1.0-py3-none-any.whl    # wheel
#   my-package-0.1.0.tar.gz               # sdist

# wheel 들여다보기 (zip 임)
unzip -l dist/my_package-0.1.0-py3-none-any.whl
TestPyPI에서 먼저 시험하기·bash
pip install twine

# test.pypi.org 업로드
twine upload --repository testpypi dist/*

# test.pypi.org 에서 install (deps 는 진짜 PyPI 에서)
pip install --index-url https://test.pypi.org/simple/ \
            --extra-index-url https://pypi.org/simple/ \
            my-package

# 진짜 PyPI 가기 전 fresh venv 에서 작동 확인
검증 뒤 PyPI에 공개하기·bash
# test.pypi.org 테스트 후
twine upload dist/*

# 필요:
# 1. https://pypi.org/ PyPI 계정
# 2. API 토큰 (계정 설정에서)
# 3. ~/.pypirc 에 토큰 설정, 또는 TWINE_PASSWORD 환경변수

# 업로드 후 누구나:
# pip install my-package
버전 번호의 의미·python
# 버전 포맷: MAJOR.MINOR.PATCH (semver)
# 1.0.0 — 첫 stable 릴리스
# 1.0.1 — 버그 수정 (새 기능 없음)
# 1.1.0 — 새 기능 (backwards-compatible)
# 2.0.0 — breaking 변경 (호출자가 업데이트 필요할 수)
#
# Pre-release: 1.0.0a1 (alpha), 1.0.0b1 (beta), 1.0.0rc1 (RC)
# Dev: 1.0.0.dev0
#
# 단일 진실 소스 — pyproject.toml [project] version 필드.
# 프로그램으로 필요 없으면 __version__에 중복하지 마.
# 설치된 패키지에서 읽으려면 importlib.metadata.

External links

Exercise

앞 수업의 mini_pkg를 python -m build로 만들고 wheel 안의 METADATA, WHEEL, __init__.py, cli.py를 살펴봐. 실제 색인에는 올리지 말고 배포물 자체가 완전한지만 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.