本文へ移動
技術を、自社の仕事に。
判断と実行を助けるメディア

記事を検索

uv 0.13で止まるインストール 制約ファイルと3.15既定化

目次 · 7項目

Python の開発で pip の代わりに uv を使い、CI や Dockerfile でも uv pip install や uv sync を実行している。uv の版を固定せずに最新を入れる設定だと、ある日を境にビルドが失敗する、あるいは知らないうちに別の Python で動いている、ということが起こりえます。

2026年10月9日に公開された uv 0.13.0 は、変更履歴で「Breaking changes」を8項目挙げています。冒頭には「We expect most users to be able to upgrade without making changes.」とあり、変更なしで更新できる見込みとされています。ただし、要件ファイルや制約ファイルの書き方によっては、それまで通っていたインストールがエラーで止まります。0.12.24 と 0.13.0 を手元で動かして確かめた結果を整理します。10月14日に公開された 0.13.1 の変更履歴には、この記事で扱う制約ファイルと既定の Python の挙動を元に戻す項目はありません。

既定のPythonが3.14から3.15に

1つ目の変更は、Python の版を指定しなかったときに使う「既定の安定版」が 3.14 から 3.15 に変わったことです。変更履歴には次のようにあります。

uv continues to use compatible Python installations that are already present. … If no suitable interpreter is installed and automatic downloads are enabled, commands such as uv venv and uvx python can now download Python 3.15.

インストール先を空にして uv python install を版の指定なしで実行し、詳細ログを比べました。

# uv 0.12.24
DEBUG Found download `cpython-3.14.8-linux-x86_64-gnu` for request `default (cpython-any-linux-x86_64-gnu)`
# uv 0.13.0
DEBUG Found download `cpython-3.15.0-linux-x86_64-gnu` for request `default (cpython-any-linux-x86_64-gnu)`

CI のように毎回まっさらな環境で動かし、Python の版をどこにも書いていない場合、uv を上げた時点で 3.15 に切り替わります。利用しているライブラリが 3.15 に対応しているかを確かめるまでは、変更履歴が案内するとおり、プロジェクトでは uv python pin 3.14 で .python-version に版を記録し、CI でも明示しておくのが安全です。

それまで通ったインストールが止まる3つの書き方

制約ファイル(constraints、-c で渡す「入れるなら、この版の範囲で」という指定)の扱いが3か所で変わりました。同じファイルで両方の版を試した結果を図にまとめます。

編集部の検証結果。要件ファイルから読み込む制約ファイルに--require-hashesがある場合、0.12.24はインストールでき0.13.0はハッシュがないとエラー。制約ファイルに-eの編集可能な指定がある場合、0.12.24は無視して進み0.13.0はエラー。-cに空白区切りで2つのファイルを渡した場合、0.12.24は2つに分けて読み0.13.0は1つのファイル名として扱いエラー

制約ファイルの --require-hashes が効くようになった

要件ファイル(requirements.txt)の中で -c cons.txt と書いて制約ファイルを読み込み、その制約ファイルに --require-hashes がある場合です。

# 0.12.24
 + idna==3.10
# 0.13.0
error: In `--require-hashes` mode, all requirements must have a hash, but none were provided for: idna==3.10

0.12 までは、この指定が黙って無視されていました。つまり、ハッシュの確認をしているつもりで、実際には確認されていなかったことになります。0.13 では指定どおりにすべての要件にハッシュが求められます。変更履歴は、ハッシュを追加するか、意図していないなら指定を外すよう案内しています。サプライチェーン攻撃への備えとしてハッシュの確認を入れたはずなら、要件ファイル側にもハッシュを揃えるのが本来の形です。

制約ファイルの -e(編集可能な指定)がエラーに

制約ファイルに -e ./localpkg のような編集可能な指定を書いていた場合、0.12.24 では無視されてインストールが進み、0.13.0 では次のエラーで止まりました。

error: Editable requirements are not allowed as constraints in `cons-e.txt`

変更履歴は「matching pip’s behavior」としており、pip と同じ扱いになりました。編集可能な指定は、要件ファイル(-r)に移すか、--editable で直接渡します。

-c "a.txt b.txt" が1つのファイル名に

-c に空白区切りで2つのファイル名を渡す書き方です。0.12.24 は2つのファイルとして読み、0.13.0 は「a.txt b.txt」という名前の1つのファイルを探して止まりました。

error: File not found: a.txt b.txt

-c a.txt -c b.txt のように、オプションを繰り返す形に書き換えます。変更履歴によると、環境変数 UV_CONSTRAINT などの空白区切りは引き続き使えます。シェルスクリプトや Makefile で変数を展開して渡している箇所は、引用符の付け方で結果が変わるため確認が必要です。

仮想環境から消えるファイル

uv venv で作った仮想環境(Python 3.13)の site-packages を比べると、0.12.24 では _virtualenv.pth と _virtualenv.py が作られ、0.13.0 では作られませんでした。変更履歴の「Omit the distutils startup patch on Python 3.10 and later」の項目です。Python 3.10 以降では不要になった仕組みで、既存の仮想環境は変更されません。このファイルの有無を前提にしたスクリプトがなければ、影響はありません。

そのほかの変更

変更履歴に挙がっている残りの項目です。

  • Windows ARM64 で、ネイティブの Python を優先するようになりました。x86_64 版を使い続ける場合は UV_PYTHON_ARCH=x86_64 を設定します
  • tar の展開に別の部品(tar-codec)を使うようになり、検証が厳しくなりました。ハードリンクを含むアーカイブなどが拒否される場合があり、UV_LEGACY_TAR_BACKEND=1 で以前の動作に戻せます。10月14日の 0.13.1 で、ハードリンクを含むソース配布物などへの対応が戻されています(「Restore support for source distributions containing hard links …」)
  • uv build --clear の出力先がソースを含む場合は拒否します(以前はプロジェクトを消してしまうおそれがありました)
  • キャッシュの形式が変わったため、更新直後は依存関係を再ダウンロード・再ビルドする場合があります。CI のキャッシュの容量や所要時間が一時的に増えることがあります
  • ビルドバックエンド uv_build に上限を付けている場合は、uv_build>=0.13.0,<0.14 のように更新します

更新の進め方

以下は編集部の提案です。

  1. CI と Dockerfile の uv の版を固定する。 pip install uv==0.12.24 や公式のインストーラーの版指定、astral-sh/setup-uv の version で固定し、上げるタイミングを自分で決める
  2. Python の版を明示する。 .python-version と CI の設定に 3.14 などを書く
  3. 制約ファイルを検索する。 --require-hashes、-e、-c "… …" の書き方を探し、上の3つに当たる箇所を直す
  4. 0.13 系で一度ビルドを通してから、版の固定を外すか更新する。 試すなら、tar の展開の修正が入った 0.13.1 以降を使う

Python の依存部品の監査はuv audit でPythonの依存脆弱性を継続チェックする、公開直後の版を避ける設定はPip 26.1 Dependency Cooldowns、Python のアプリをサーバーレスで動かす選択肢はCloudflare Python Workersでも扱っています。

確認した範囲

2026年10月12日に、astral-sh/uv の CHANGELOG.md(0.13.0、Released on 2026-10-09)と PyPI の公開日時を確認しました(資料調査)。あわせて Linux 上で uv 0.12.24 と 0.13.0 をそれぞれの仮想環境に入れ、Python 3.13.16 の仮想環境に対する uv pip install --dry-run で制約ファイルの3つの書き方を比べ、uv venv で作った環境のファイル、版の指定なしの uv python install -v のログを確かめました(実機検証)。Python 3.15 での動作、Windows(ARM64 を含む)、tar の展開の違い、uv sync・uv lock を使うプロジェクトでの影響、0.13.1 での動作は試していません。2026年10月16日に、CHANGELOG.md の 0.13.1(Released on 2026-10-14)を確認しました。

Python で作る業務システムの開発環境や CI の整備は、開発・AI・自動化のご相談からお問い合わせください。

参考資料

この記事を共有XFacebook
鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

この記事のテーマを、自社の次の一歩へ

自社での進め方を、具体的に。

つくりたい仕組み、既存システム、運用の条件を整理し、実現に向けた次の一歩を考えます。

  • 実現したい仕組み
  • 既存環境との接続
  • 運用の条件
開発・運用の構想を相談する

構想段階からご相談いただけます。この記事の情報を相談フォームに引き継ぎます。

最新記事をメールで受け取る