パッケージの公開
uvは、uv build
を使用してPythonパッケージをソースおよびバイナリディストリビューションにビルドし、uv publish
を使用してレジストリにアップロードすることをサポートしています。
パッケージングのためのプロジェクトの準備
プロジェクトを公開する前に、配布用にパッケージ化する準備ができていることを確認してください。
プロジェクトにpyproject.toml
に[build-system]
定義が含まれていない場合、uvはデフォルトでビルドしません。これは、プロジェクトが配布の準備ができていない可能性があることを意味します。ビルドシステムを宣言することの影響については、プロジェクトの概念のドキュメントを参照してください。
Note
もし公開したくない内部パッケージがある場合は、プライベートとしてマークできます:
この設定により、PyPIはアップロードされたパッケージの公開を拒否します。他のレジストリのセキュリティやプライバシー設定には影響しません。
また、プロジェクトごとのトークンの生成のみを推奨します。プロジェクトに一致するPyPIトークンがない場合、誤って公開されることはありません。
パッケージのビルド
uv build
を使用してパッケージをビルドします:
デフォルトでは、uv build
は現在のディレクトリでプロジェクトをビルドし、ビルドされたアーティファクトをdist/
サブディレクトリに配置します。
また、uv build <SRC>
を使用して指定されたディレクトリでパッケージをビルドすることも、uv build --package <PACKAGE>
を使用して現在のワークスペース内の指定されたパッケージをビルドすることもできます。
Info
デフォルトでは、uv build
はpyproject.toml
のbuild-system.requires
セクションからビルド依存関係を解決する際にtool.uv.sources
を尊重します。パッケージを公開する場合、uv build --no-sources
を実行して、他のビルドツール(例:pypa/build)を使用する場合と同様に、tool.uv.sources
が無効になっているときにパッケージが正しくビルドされることを確認することをお勧めします。
パッケージの公開
uv publish
を使用してパッケージを公開します:
PyPI トークンを --token
または UV_PUBLISH_TOKEN
で設定するか、--username
または UV_PUBLISH_USERNAME
を使用してユーザー名を、--password
または UV_PUBLISH_PASSWORD
を使用してパスワードを設定します。 GitHub Actions から PyPI に公開する場合は、資格情報を設定する必要はありません。代わりに、PyPI プロジェクトに信頼されたパブリッシャーを追加します。
Note
PyPIはもはやユーザー名とパスワードでの公開をサポートしていません。代わりにトークンを生成する必要があります。トークンを使用することは、--username __token__
を設定し、パスワードとしてトークンを使用することと同等です。
uv publish
は失敗したアップロードを再試行しますが、アップロード途中で一部のファイルはアップロードされ、一部のファイルが欠落したまま公開が失敗することがあります。PyPI の場合、まったく同じコマンドを再試行できます。既存の同一ファイルは無視されます。他のレジストリの場合、パッケージが属するインデックス URL(公開 URL ではありません)で --check-url <index url>
を使用します。uv はレジストリ内の同一ファイルのアップロードをスキップし、並列アップロードの競合も処理します。なお、既存のファイルはレジストリに以前アップロードされたファイルと完全に一致する必要があります。これにより、同じバージョンに対して異なる内容のソースディストリビューションやホイールを誤って公開することを防ぎます。
パッケージのインストール
uv run
を使用してパッケージがインストールおよびインポートできることをテストします:
--no-project
フラグは、ローカルプロジェクトディレクトリからパッケージをインストールしないようにするために使用されます。
Tip
最近パッケージをインストールした場合、キャッシュされたバージョンのパッケージを使用しないようにするために--refresh-package <PACKAGE>
オプションを含める必要があるかもしれません。
次のステップ
パッケージの公開について詳しく知るには、PyPAガイドのビルドおよび公開に関するセクションを参照してください。
または、uvの概念についての詳細を読むことができます。