twine으로 게시하기
PyPI에 업로드하기
twine으로 게시하기은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
마지막 단계
dist/에 빌드 결과물이 있습니다. 마지막 단계는 결과물을 PyPI에 업로드하여 전 세계 사람들이 pip install로 패키지를 설치할 수 있게 하는 것입니다. 이를 위한 표준 도구는 트와인입니다.
트와인은 HTTPS를 통해 안전하게 업로드하며, 전송하기 전에 결과물의 유효성을 검사합니다.
트와인 설치하기
pip install twine으로 설치하세요. 트와인은 작고 목적이 분명한 도구로, dist/에 있는 파일을 검사하고 업로드하는 일만 담당합니다. 빌드는 수행하지 않습니다.
먼저 TestPyPI 사용하기
업로드를 연습할 수 있는 별도의 샌드박스인 TestPyPI가 있습니다. 실제 색인을 오염시키지 않고 문제를 발견할 수 있도록 먼저 이곳에 게시하세요. TestPyPI의 이름과 버전은 PyPI와 독립적입니다.
twine upload --repository testpypi dist/*로 업로드하세요.
업로드 전 확인하기
twine check dist/*는 메타데이터와 긴 설명이 PyPI에서 올바르게 렌더링되는지 검사합니다. 매번 실행하세요. README 설명에 문제가 있으면 프로젝트 페이지에 일반 텍스트로 표시될 수 있습니다.
files = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in files:
status = 'PASSED' if f.endswith(('.gz', '.whl')) else 'SKIP'
print('check', f, '->', status)비밀번호가 아닌 API 토큰
비밀번호가 아니라 PyPI 계정의 API 토큰으로 인증하세요. 사용자 이름에는 __token__을 사용하고, pypi-로 시작하는 토큰을 비밀번호로 사용하세요. 토큰의 범위를 단일 프로젝트로 제한할 수 있으며 언제든지 폐기할 수 있습니다.
username = '__token__'
token = 'pypi-AgEIcHl...'
print('Username:', username)
print('Token starts with:', token[:5])
print('Never commit the token to git')인증 정보 저장하기
토큰을 매번 다시 입력하지 않으려면 ~/.pypirc 파일이나 환경 변수(TWINE_USERNAME, TWINE_PASSWORD)에 저장하세요. 이 파일을 버전 관리에서 제외하고 본인만 읽을 수 있도록 하세요.
PyPI에 업로드하기
TestPyPI에서 문제가 없으면 twine upload dist/*로 실제 게시를 진행하세요. 몇 분 안에 전 세계에서 패키지를 설치할 수 있게 됩니다. 되돌릴 수 없으므로, 버전을 삭제한 뒤에는 같은 버전을 다시 업로드할 수 없습니다.
버전은 변경할 수 없습니다
PyPI에서는 출시된 버전을 덮어쓸 수 없습니다. 게시한 후 버그를 발견하면 새 버전을 출시해야 합니다(예를 들어 패치 버전을 올리세요). 이 규칙을 작업 흐름에 포함하여 난처한 상황에 빠지지 않도록 하세요.
published = {'1.0.0', '1.0.1'}
new_version = '1.0.1'
if new_version in published:
print(new_version, 'already on PyPI - bump and rebuild')
else:
print(new_version, 'is free to upload')설치 확인하기
업로드한 후 제대로 작동하는지 확인하세요. 새 가상 환경을 만들고 pip install mytool을 실행한 다음 패키지를 가져오세요. 깨끗한 환경에 설치하면 빌드 과정에서 발견하지 못한 파일 누락과 종속성 문제를 확인할 수 있습니다.
신뢰할 수 있는 게시
최신 프로젝트에서는 신뢰할 수 있는 게시를 사용하여 수동 토큰을 생략할 수 있습니다. PyPI가 OpenID 연결을 통해 CI 작업 흐름을 직접 인증합니다(GitHub 작업과 같은 방식입니다). 오래 유지되는 비밀 정보가 어디에도 저장되지 않으므로 더 안전합니다.
업로드는 여전히 트와인이 수행하지만, 인증 정보는 수명이 짧고 실행 시점에 발급됩니다.
릴리스 자동화하기
일반적인 설정에서는 v1.0.0과 같은 깃 태그를 푸시하면 릴리스가 시작됩니다. CI 작업 흐름이 자동으로 빌드하고 twine check를 실행한 다음 업로드합니다. 태그 지정이 버전을 배포하는 단일 작업이 됩니다.
이렇게 하면 릴리스가 일관되게 진행되고 수동 업로드 실수가 줄어듭니다.
간단히 확인하기
게시 지식을 테스트해 보세요.
복습
패키지를 게시하는 방법을 익혔습니다.
pip install twine을 실행한 다음twine check dist/*실행하기- 실제로 업로드하기 전에 TestPyPI에서 연습하기
- 범위가 제한된 API 토큰(
__token__)으로 인증하고, 비밀번호는 절대 사용하지 않기 twine upload dist/*로 게시하기. 버전은 변경할 수 없으므로 버그를 수정하려면 버전을 올리기- 깨끗한 환경에서
pip install로 확인하기
자주 묻는 질문
“twine으로 게시하기” 강의는 무료인가요?
네 — “twine으로 게시하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“twine으로 게시하기”에서 뭘 배우나요?
PyPI에 업로드하기 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“twine으로 게시하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 프로젝트 구조와 pyproject.toml
- build로 빌드하기
- 버전 관리와 메타데이터
- twine으로 게시하기