プログラミング
Uv 0.12.0 リリース
要約
Rust製の高速なPythonパッケージインストーラーであるuvのバージョン0.12.0がリリースされました。このバージョンでは、プロジェクト初期化時のビルドシステム定義のデフォルト化、サポートされないアーカイブ形式の拒否、インタープリターを上書きする可能性のあるホイールファイルの拒否、依存関係解決における安定版リリース優先などの変更が含まれています。また、requirements.txt内の--require-hashesディレクティブの尊重や、MD5のみのハッシュの拒否なども行われています。
全文翻訳
Uv 0.12.0
リリースノート
2026年7月28日にリリースされました。
uv 0.11.0を3月にリリースして以来、正確性、安全性、仕様への互換性を向上させる変更が蓄積されましたが、一部のワークフローを壊す可能性がありました。このリリースにはそれらの変更が含まれており、多くの変更は万全を期すために破壊的変更としてマークされています。ほとんどのユーザーは変更なしでアップグレードできると予想されます。
uvビルドバックエンドの設定に破壊的変更はありません。もし[build-system]テーブルにuv_buildの上限が含まれている場合は、uv_build 0.12を許可するように更新してください。例: uv_build>=0.11.32,<0.13。
破壊的変更
デフォルトでuv initでビルドシステムを定義する (#19197)
uv initで作成されたプロジェクトは、ビルドシステムを宣言し、デフォルトでパッケージ化されるようになりました。これはv0.3のデフォルトのプロジェクトレイアウトでしたが、hatchlingビルドシステムの利用が新規ユーザーを混乱させることに気づき、v0.4でデフォルトでのビルドシステムの使用を中止しました。それ以来、uvと緊密に統合された独自のビルドシステム(uv_build)を作成し、デフォルトをベストプラクティスのプロジェクトレイアウトに戻すことを嬉しく思います。
以前は、uv init exampleはmain.pyとビルドシステムのないpyproject.tomlを含むパッケージ化されていないレイアウトを作成していました。プロジェクトは依存関係を宣言できましたが、それ自体は仮想環境にインストールされませんでした。現在、uv init exampleはuv_buildを使用した[build-system]を定義し、アプリケーションソースコードをsrc/exampleに配置し、exampleという名前の[project.scripts]エントリを含みます。ビルドシステムを定義することで、プロジェクトはテストや他のコードからインポートしたり、依存関係としてインストールしたり、コマンドとして実行したりできます。
例: $ uv init example
$ cd example
$ uv run example
Hello from example!
既存のプロジェクトは影響を受けません。ビルドシステムなしの以前のパッケージ化されていないレイアウトを作成するには、uv init --no-package exampleを使用してください。詳細については、プロジェクト作成ドキュメントを参照してください。
これにより、packaged-initプレビュー機能が安定化されました。
サポートされていないソース配布およびホイールアーカイブ形式を拒否する (#18927)
Pep 625は、ソース配布に.tar.gzアーカイブを使用することを要求しています。以前は、uvは.tar.bz2や.tar.xzなどのレガシー形式も受け入れていました。これらの形式は現在拒否されます。既存のロックファイルで参照されている場合も同様です。レガシー.zipソース配布は、後方互換性のために引き続きサポートされます。
ホイールおよびその他のZIPアーカイブは、bzip2、LZMA、またはXZで圧縮されたエントリを含めることができなくなりました。エントリは、stored、DEFLATE、またはzstd圧縮メソッドを使用する必要があります。一般的でない圧縮方法のサポートを削除することで、uvの圧縮依存関係と、信頼できないパッケージを処理する際に公開される攻撃対象領域が削減されます。
この動作をオプトアウトすることはできません。レガシーソース配布にサポートされていない形式が使用されている場合、それを.tar.gzアーカイブとして再構築し、レガシーアーカイブへの参照を含むロックファイルを再生成することを推奨します。
Pythonインタープリターを置き換える可能性のあるホイールファイルを拒否する (#20748, #20749)
uvはすでにpythonという名前のホイールエントリポイントを拒否していましたが、Pythonのような大文字小文字のバリアントは引き続き受け入れられていました。一般的なmacOSおよびWindowsの設定を含む、大文字小文字を区別しないファイルシステムでは、これらのエントリポイントは仮想環境のインタープリターを上書きする可能性がありました。ホイールは、.data/scriptsディレクトリまたは.data/data/bin/pythonのようなパスにインタープリターファイルを配置して、エントリポイントチェックをバイパスし、インストール中にインタープリターを置き換えることもできました。
uvは現在、予約されたインタープリター名のケースバリアントや、インタープリターを上書きしてインストールされるホイールデータファイルを拒否します。これには、Python、python.py、Python.exeなどの名前や、その他の予約されたインタープリター名とそのバージョン付きバリアントが含まれます。
このチェックをオプトアウトすることはできません。競合するエントリポイントまたはホイールデータファイルをリネームし、影響を受けるホイールを再構築してください。
プリリリースにフォールバックする前に安定版リリースを優先する (#19993)
依存関係は、解決が開始された後にプリリリース要件を導入する可能性があります。以前は、uvは解決が開始される前に各パッケージのプリリリース適格性を知る必要がありました。デフォルトのif-necessary-or-explicitモードは、プリリリースを明示的に要求した直接要件、またはプリリリースのみを公開したパッケージに対してそれらを許可していました。これは、依存関係のメタデータで発見されたプリリリース要件(例: example>=2.0.0b1)が、互換性のあるプリリリースが存在する場合でも解決に失敗することを意味していました。それを解決するには、その依存関係を直接要件として追加するか、依存関係グラフ全体でプリリリースを許可する必要がありました。
デフォルトモードはif-necessaryになりました。uvは安定版候補を最初に試し、アクティブな制約を満たす安定版候補がない場合にプリリリースにフォールバックします。pipと同様に、uvは現在、推移的に発見されたプリリリース要件をサポートしていますが、安定版とプリリリースの両方の候補が利用可能な場合、以前のuvリリースとは異なるバージョンを選択できます。
--prerelease disallowで自動プリリリース選択をオプトアウトできます。あるいは、--prerelease allowは安定版リリースを優先せずにプリリリースを考慮し、--prerelease explicitは直接要件でプリリリースに言及している場合にのみ許可します。以前のif-necessary-or-explicitモードは、明示的に要求されたプリリリースと安定版リリースがないパッケージを区別していました。if-necessaryが両方のケース(推移的な要件を含む)を処理するようになったため、その区別は不要になりました。以前の名前はエイリアスとして引き続き利用可能ですが、非推奨であり、将来のリリースで削除される予定です。
requirements.txt内の--require-hashesディレクティブを尊重する (#19336)
以前は、uv pip installおよびuv pip syncは、requirements.txtファイル内の--require-hashesについて警告していましたが、ハッシュをチェックせずに依存関係をインストールしていました。現在、このディレクティブは、コマンドラインで--require-hashesが渡された場合と同様に、ハッシュチェックモードを有効にします。
例として、この要件はもはや受け入れられません。なぜなら、要件はピン留めされておらず、ハッシュもされていないからです:
--require-hashes anyio
ディレクティブが存在する間は、オプトアウトすることはできません。すべての要件を==でピン留めし、そのハッシュを提供するか、ハッシュチェックが意図されていない場合は--require-hashesを削除してください。
ハッシュチェックモードでMD5のみのハッシュを拒否する (#20758)
以前は、uv pip install --require-hashesおよびuv pip sync --require-hashesは、利用可能なダイジェストがMD5のみである要件を受け入れていました。MD5は衝突耐性がないため、それに依存することは、ハッシュ検証を必要とするインストールを損ない、pipの動作とは異なりました。
ハッシュチェックモードは現在、各要件に対して少なくとも1つのセキュアなダイジェストを必要とします。例として、次の要件は、SHA-256などのセキュアなハッシュも提供されない限り拒否されます。
anyio==4.0.0 --hash=md5:420d85e19168705cdf0223621b18831a
セキュアなハッシュは、要件に直接、または一致する制約ファイルで提供できます。--require-hashesなしの通常のハッシュ検証は、引き続きMD5をサポートします。
ハッシュチェックが必要な間はオプトアウトできません。SHA-256またはその他のサポートされているセキュアなハッシュで影響を受けるハッシュを再生成してください。
無効なpylock.tomlファイルおよびアーティファクトを拒否する (#20402, #20440, #20443)
uvは現在、pylock.toml仕様からの追加の要件を検証しています。
packages配列が存在する必要があります。以前は、uvは欠落している配列を空のロックファイルとして解釈していたため、uv pip syncは拒否する代わりに環境をアンインストールする可能性がありました。