Skip to content

Locking environments#

ロックとは、ruffなどの依存関係を取得し、使用する正確なバージョンをファイルに書き込むことです。多くの依存関係を操作する場合は、環境を再現できるように正確なバージョンをロックすると便利です。ロックしないと、依存関係のバージョンは、時間の経過とともに、異なるツールを使用している場合、またはプラットフォーム間で変更される可能性があります。

Locking requirements#

uvを使用すると、依存関係をrequirements.txt形式でロックできます。依存関係を定義するには標準のpyproject.tomlを使用することをお勧めしますが、他の依存関係形式もサポートされています。依存関係の定義方法の詳細については、declaring dependenciesのドキュメントを参照してください。

pyproject.tomlで宣言された依存関係をロックするには、次のようにします。:

$ uv pip compile pyproject.toml -o requirements.txt

デフォルトではuv pip compileの出力が表示されるだけで、ファイルに書き込むには--output-file/-o引数が必要です。

requirements.inで宣言された依存関係をロックするには、次のようにします。:

$ uv pip compile requirements.in -o requirements.txt

複数のファイルで宣言された依存関係をロックするには、次の手順に従い:

$ uv pip compile pyproject.toml requirements-dev.in -o requirements-dev.txt

uvは従来のsetup.pyおよびsetup.cfgフォーマットもサポートしています。setup.pyで宣言された依存関係をロックするには:

$ uv pip compile setup.py -o requirements.txt

stdinからの依存性をロックするには、-を使用します。:

$ echo "ruff" | uv pip compile -

オプションの依存関係を有効にしてロックするには、次のようにします。:

$ uv pip install -r pyproject.toml --extra foo

すべてのオプションの依存関係を有効にしてロックするには、次の手順に従い:

$ uv pip install -r pyproject.toml --all-extras

Note extraはrequirements.inフォーマットではサポートされていません。

Upgrading requirements#

出力ファイルを使用する場合、uvは既存の出力ファイルに固定されたバージョンを考慮します。依存関係が固定されている場合、後続のコンパイル実行時にアップグレードされません。次に例を示します。:

$ echo "ruff==0.3.0" > requirements.txt
$ echo "ruff" | uv pip compile - -o requirements.txt
# This file was autogenerated by uv via the following command:
#    uv pip compile - -o requirements.txt
ruff==0.3.0

依存関係をアップグレードするには、--upgrade-packageフラグを使用します。:

$ uv pip compile - -o requirements.txt --upgrade-package ruff

すべての依存関係をアップグレードするには、--upgradeフラグを使用します。

Syncing an environment#

依存関係は、定義ファイルから直接インストールすることも、uv pip installを使用してコンパイルされたrequirements.txtファイルからインストールすることもできます。詳細については、installing packages from filesのドキュメントを参照してください。

uv pip installを使用してインストールする場合、すでにインストールされているパッケージは、ロックファイルと競合しない限り削除されません。これは、環境がロックファイルで宣言されていない依存関係を持つ可能性があることを意味し、再現性には優れていません。環境がロックファイルと正確に一致することを保証するには、代わりにuv pip syncを使用してください。

環境をrequirements.txtファイルと同期させるには、次の手順に従います。:

$ uv pip sync requirements.txt

環境をpyproject.tomlファイルと同期させるには:

$ uv pip sync pyproject.toml

Adding constraints#

制約ファイルはrequirements.txtのようなファイルで、インストールされている要件の_バージョン_のみを制御します。ただし、制約ファイルにパッケージを含めると、そのパッケージのインストールは_トリガーされません_。制約を使用して、現在のプロジェクトの依存関係ではない依存関係に境界を追加できます。

制約を定義するには、パッケージのバインドを定義します。:

constraints.txt
pydantic<2.0

拘束ファイルを使用するには:

$ uv pip compile requirements.in --constraint constraints.txt

各ファイルには複数の制約を定義でき、複数のファイルを使用できます。

Overriding dependency versions#

オーバーライドファイルはrequirements.txtに似たファイルで、構成パッケージによって宣言された要件に関係なく、またこれが無効な解決と見なされるかどうかに関係なく、特定のバージョンの要件を強制的にインストールします。

制約は、それを構成するパッケージの要件と組み合わされるという点で_加法的_ですが、オーバーライドは、それを構成するパッケージの要件を完全に置き換えるという点で_絶対的_です。

オーバーライドは、ほとんどの場合、推移的な依存関係から上限を削除するために使用されます。たとえば、ac>=1.0,<2.0を必要とし、bc>=2.0を必要とし、現在のプロジェクトがabを必要とする場合、依存関係は解決できません。

オーバーライドを定義するには、問題のあるパッケージの新しい要件を定義します。:

overrides.txt
c>=2.0

オーバーライドファイルを使用するには:

$ uv pip compile requirements.in --override overrides.txt

これで解決は成功します。ただし、ac>=2.0をサポートしていないことが正しい場合、パッケージの使用時に実行時エラーが発生する可能性があることに注意してください。

各ファイルには複数のオーバーライドを定義でき、複数のファイルを使用できます。