Skip to content

パッケージの公開

uvは、uv buildを使用してPythonパッケージをソースおよびバイナリディストリビューションにビルドし、uv publishを使用してレジストリにアップロードすることをサポートしています。

パッケージングのためのプロジェクトの準備

プロジェクトを公開する前に、配布用にパッケージ化する準備ができていることを確認してください。

プロジェクトにpyproject.toml[build-system]定義が含まれていない場合、uvはデフォルトでビルドしません。これは、プロジェクトが配布の準備ができていない可能性があることを意味します。ビルドシステムを宣言することの影響については、プロジェクトの概念のドキュメントを参照してください。

Note

もし公開したくない内部パッケージがある場合は、プライベートとしてマークできます:

[project]
classifiers = ["Private :: Do Not Upload"]

この設定により、PyPIはアップロードされたパッケージの公開を拒否します。他のレジストリのセキュリティやプライバシー設定には影響しません。

また、プロジェクトごとのトークンの生成のみを推奨します。プロジェクトに一致するPyPIトークンがない場合、誤って公開されることはありません。

パッケージのビルド

uv buildを使用してパッケージをビルドします:

$ uv build

デフォルトでは、uv buildは現在のディレクトリでプロジェクトをビルドし、ビルドされたアーティファクトをdist/サブディレクトリに配置します。

また、uv build <SRC>を使用して指定されたディレクトリでパッケージをビルドすることも、uv build --package <PACKAGE>を使用して現在のワークスペース内の指定されたパッケージをビルドすることもできます。

Info

デフォルトでは、uv buildpyproject.tomlbuild-system.requiresセクションからビルド依存関係を解決する際にtool.uv.sourcesを尊重します。パッケージを公開する場合、uv build --no-sourcesを実行して、他のビルドツール(例:pypa/build)を使用する場合と同様に、tool.uv.sourcesが無効になっているときにパッケージが正しくビルドされることを確認することをお勧めします。

パッケージの公開

uv publishを使用してパッケージを公開します:

$ 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を使用してパッケージがインストールおよびインポートできることをテストします:

$ uv run --with <PACKAGE> --no-project -- python -c "import <PACKAGE>"

--no-projectフラグは、ローカルプロジェクトディレクトリからパッケージをインストールしないようにするために使用されます。

Tip

最近パッケージをインストールした場合、キャッシュされたバージョンのパッケージを使用しないようにするために--refresh-package <PACKAGE>オプションを含める必要があるかもしれません。

次のステップ

パッケージの公開について詳しく知るには、PyPAガイドのビルドおよび公開に関するセクションを参照してください。

または、uvの概念についての詳細を読むことができます。