開発者ツール

PEP 440バージョン比較Pythonの候補が選ばれる理由を確認

1行に1バージョン。正規化、並べ替え、カンマで結んだ条件の照合に対応します。

PEP 440バージョン比較

バージョン(1行に1件)

検証レポート

入力するかサンプルを読み込んでください。

入力はこのブラウザー内で処理され、サーバーには送信されません。

オプション

カンマはAND。空条件には境界がありません。~= == != <= >= < > ===に対応し、.*は==または!=のリリース接頭辞で使います。

最大1,000件。UTF-16単位で各行256、条件2,048、一覧全体100,000まで。空行は飛ばし、元の入力は変更しません。

現在の候補を検証中…

PEP 440バージョン比較は、新しいはずのリリースが依存関係の候補から外れる理由を調べるためのツールです。表記が有効か、大小関係はどうか、条件に適合するかを分けて確認できます。

1.0と1.0.0は比較では同じですが、正規化した表示では元のリリース桁数を残します。文字列の辞書順やnpm向けの範囲判定では見落とすepoch、dev、postの違いも扱います。

PEP 440バージョン比較で分かること

表記を直しても元の情報を残す

PEP 440バージョン比較ではv01.1から1.1への正規化を元の行と並べて表示します。各行を展開すると、epoch、リリース、pre、post、dev、localの構成を確認でき、入力を書き換える必要はありません。

異なる表記のカードが正規化を通って分節されたカードにそろい、入力側のカードも残っている図。

候補一覧によって変わる判定を説明

自動モードはまず全条件に合う候補を集めます。正式版などの非プレリリースがあればそれを優先し、なければ適合するプレリリースへフォールバックします。候補を追加しただけで判定が変わる理由が見えます。

正式版がある場合にプレリリースを保留する流れと、正式版がない場合に通す流れの対比。

判定を読む前の三つの確認

01

正規化と照合を使い分ける

正規化は表記を検証する操作です。並べ替えは大小関係を使い、照合は入力順のまま条件への適合を示します。同値の行は元の順を維持し、不正な行は並べ替え時だけ末尾へ移ります。

02

自動判定は一覧全体で試す

条件を満たす正式版を削除して、プレリリースが候補に戻るか確認してください。「含める」を選んでも数値の境界は変わりません。1.0rc1は1.0より前なので>=1.0には適合しません。

03

編集後は更新を待つ

自動実行は350ミリ秒待って計算します。オフにすると実行ボタンとCtrl/Cmd+Enterが使えます。変更直後の古い結果は出力できません。例とクリアはプレビュー後に適用し、一度だけ元に戻せます。

表記・順序・条件を別々に確認

受け入れ可能な表記を正規化

v接頭辞、数字の先頭ゼロ、alphaやpreviewなどの別名、ローカルラベルの区切りを整理します。リリースの桁数は増減させず、1.0.0はそのまま表示します。比較時の末尾ゼロ補完とは別の処理です。

epochと接尾辞を含めて並べ替え

epochを先に比較し、その後リリース番号、開発版、alpha、beta、rc、正式版、postの順序規則を適用します。ローカル部分の数字は整数として比較し、大きな値も丸めません。

複数のバージョン指定子を照合

~=、==、!=、<=、>=、<、>、===を扱います。カンマはANDです。==1.4.*などのリリース接頭辞にも対応し、不適合とプレリリース方針による除外を区別します。

不正な行を消さずに報告

バージョンのエラーは該当行に残し、他の行は処理を続けます。条件のエラーは計算全体を止めます。表示は50行ずつ追加できますが、JSONには全行と元の行番号が含まれます。

対応範囲と制限

入力はバージョンと条件のみ
パッケージ名、extras、環境マーカー、requirementsファイル、URL、ロックファイルは解析しません。PyPIへの照会、インストール、依存解決、プロジェクトの書き換え、次版の推測も行いません。適合してもAPI互換性は保証されません。
他のエコシステムの範囲は対象外
^1.2、単独の~1.2、OR、ハイフン範囲は条件エラーです。互換リリースには~=1.2を使います。空条件には数値の境界がありませんが、プレリリース方針は適用されます。空のカンマ区間は無視します。
localは演算子ごとに扱いが異なる
ローカルバージョンは並べ替えに影響します。公開版だけの==と!=は候補のlocalを無視し、local付きの等値条件はその部分も比較します。>=1.0+linuxや~=1.0+linuxは不正です。
===でも不正な候補は受け付けない
===は候補の正規化後の表記と比較し、末尾ゼロによる同値扱いをしません。候補自体は有効なバージョンである必要があり、===legacyを指定してもlegacyの行はエラーです。古いインストーラーの挙動は再現しません。
自動方針は提示された一覧だけが基準
devもプレリリースです。正向きの条件がプレリリースを明示していれば許可し、それ以外は適合する非プレリリースの有無でフォールバックを決めます。インストール済みの版や一覧にない配布物は参照しません。
上限を超えて黙って切り捨てない
空でない行は最大1,000行、各行256、条件2,048、入力全体100,000のUTF-16単位です。これは本ツールの予算です。空行を飛ばしても元の物理行番号を残し、重複を削除せず、並べ替えでも入力は変更しません。

PEP 440バージョン比較のよくある質問

依存条件の~=は何を意味しますか?

下限とリリース接頭辞を組み合わせます。~=1.4は1.4以上で1.*の範囲、~=1.4.0は1.4.*の範囲です。~=1のような1桁だけの指定は不正です。プレリリースを選ぶかどうかは別に判定します。

単独では通るプレリリースが一覧では除外されるのはなぜですか?

自動フィルターは適合する非プレリリースがなければプレリリースを使えます。正式版やpost版の追加でこの前提が変わります。「含める」で条件に合う候補全体を、「除外」でプレリリース以外だけを確認できます。

公開版とローカル版はどちらが後になりますか?

公開部分が同じならlocal付きの方が後です。例えば1.0 < 1.0+abcとなります。local内の数値要素は文字列要素より後に並びます。SemVerのビルドメタデータとは違い、大小関係に影響します。

条件にローカルラベルを指定できますか?

==1.0+linux.1や!=1.0+linux.1は指定できます。>=や~=では指定できません。==1.0のように公開部分だけを指定した場合、特定のローカルビルドを要求しないため1.0+linux.1も対象になり得ます。

Pythonでバージョン番号を比較するには?

PEP準拠の比較にはpackaging.version.Versionを使えます。このページのエンジンはpackaging 26.0との照合を行っています。文字列比較では1.10と1.9の順序を誤り、別規格の解析器ではepochやpostを扱えないことがあります。

preやpostの後ろに.*を付けられますか?

==1.0.*は有効ですが、==1.0rc1.*と==1.0.post1.*は不正です。接尾辞を制限するには完全な等値条件や通常の上下限を使ってください。接頭辞一致でもプレリリース方針は省略されません。

予想と違う結果ですか?

実際の候補一覧で確かめる

PEP 440バージョン比較に調査中の一覧と条件を戻し、エラー行と自動判定の説明を確認しましょう。現在の設定と全行の結果を保存すれば、同じ判断を後で再現できます。