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 venvanduvx pythoncan 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 が効くようになった
要件ファイル(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のように更新します
更新の進め方
以下は編集部の提案です。
- CI と Dockerfile の uv の版を固定する。
pip install uv==0.12.24や公式のインストーラーの版指定、astral-sh/setup-uvのversionで固定し、上げるタイミングを自分で決める - Python の版を明示する。
.python-versionと CI の設定に 3.14 などを書く - 制約ファイルを検索する。
--require-hashes、-e、-c "… …"の書き方を探し、上の3つに当たる箇所を直す - 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・自動化のご相談からお問い合わせください。









