twineによる公開
PyPIにアップロードします
「twineによる公開」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
最後のステップ
dist/に成果物が作成されています。最後のステップは、それらをPyPIにアップロードして、世界中の人があなたのパッケージをpip installできるようにすることです。これに使う標準的なツールがtwineです。
twineはHTTPS経由で安全にアップロードし、送信前に成果物を検証します。
twineのインストール
pip install twineでインストールします。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を実行し、その後インポートします。クリーンな環境へのインストールによって、ビルドでは検出できなかったファイル不足や依存関係の間違いを見つけられます。
Trusted Publishing
最新のプロジェクトでは、Trusted Publishingを使って手動のトークンを省略できます。PyPIがOpenID Connectを通じて、CIワークフロー(GitHub Actionsなど)を直接認証します。長期間有効なシークレットをどこにも保存しないため、より安全です。
アップロードには引き続きtwineを使いますが、認証情報は有効期間が短く、実行時に発行されます。
リリースの自動化
よくある構成では、v1.0.0のようなgitタグをプッシュするとリリースが始まります。CIワークフローがビルドし、twine checkを実行して、自動的にアップロードします。タグ付けが、バージョンを公開する唯一の操作になります。
これによりリリースの一貫性が保たれ、手動アップロードによるミスもなくなります。
クイックチェック
パッケージ公開の知識を確認しましょう。
振り返り
パッケージを公開できるようになりました:
pip install twineを実行し、続けてtwine check dist/*を実行する- 本番環境にアップロードする前にTestPyPIで練習する
- パスワードではなく、権限を限定したAPIトークン(
__token__)で認証する twine upload dist/*で公開する。バージョンは不変なので、バグを修正するときはバージョンを上げる- クリーンな環境で
pip installを実行して確認する
よくある質問
「twineによる公開」レッスンは無料ですか?
はい。「twineによる公開」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「twineによる公開」で何を学びますか?
PyPIにアップロードします ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「twineによる公開」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。