Skip to content

環境のロック

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

依存関係のロック

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

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

標準入力から依存関係をロックするには、-を使用します:

$ echo "ruff" | uv pip compile -

オプションの依存関係を有効にしてロックするには、例として「foo」エクストラを使用します:

$ uv pip compile pyproject.toml --extra foo

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

$ uv pip compile pyproject.toml --all-extras

requirements.in形式ではエクストラはサポートされていないことに注意してください。

依存関係のアップグレード

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

$ echo "ruff==0.3.0" > requirements.txt
$ echo "ruff" | uv pip compile - -o requirements.txt
# このファイルは次のコマンドによってuvによって自動生成されました:
#    uv pip compile - -o requirements.txt
ruff==0.3.0

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

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

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

環境の同期

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

uv pip installを使用してインストールする場合、既にインストールされているパッケージはロックファイルと競合しない限り削除されません。 これにより、環境にはロックファイルに宣言されていない依存関係が含まれる可能性があり、再現性に問題が生じることがあります。 環境がロックファイルと完全に一致することを確認するには、代わりにuv pip syncを使用します。

requirements.txtファイルで環境を同期するには:

$ uv pip sync requirements.txt

pyproject.tomlファイルで環境を同期するには:

$ uv pip sync pyproject.toml

制約の追加

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

制約を定義するには、パッケージの境界を定義します:

constraints.txt
pydantic<2.0

制約ファイルを使用するには:

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

各ファイルに複数の制約を定義でき、複数のファイルを使用できることに注意してください。

依存関係のバージョンの上書き

オーバーライドファイルは、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をサポートしていない場合、パッケージを使用する際にランタイムエラーが発生する可能性があることに注意してください。

各ファイルに複数のオーバーライドを定義でき、複数のファイルを使用できることに注意してください。