pypiにリリースするときのversionルールについて

以下のドキュメントをわかりやすくメモとして記載します

packaging.python.org

バージョン形式の構造

正規形式: [N!]N(.N)*[{a|b|rc}N][.postN][.devN]

構成要素(順番通り)

  1. エポック(オプション): 1! など
  2. リリースセグメント: 1.2.3 など
  3. プレリリース(オプション): a1, b2, rc3 など
  4. ポストリリース(オプション): .post1 など
  5. 開発リリース(オプション): .dev1 など

正規化のルール

  1. 大文字小文字:すべて小文字に変換される
  2. 区切り文字:., -, _ はすべて . に統一
  3. 前ゼロ:削除される(01.02.03 → 1.2.3)
  4. 暗黙の数値:.dev, .post などの後の数字を省略すると0

開発リリース(.dev)

  • .devN で示される
  • 対応するリリースの直前に配置される
  • プレリリースやポストリリースと併用可能
  • 数値を省略した場合は暗黙的に0
  • 例:1.2.dev0, 1.2a1.dev1, 1.2.post1.dev2

ポストリリース(.post)

  • .postN で示される
  • リリース後の軽微な修正に使用
  • 最終リリースの後に配置
  • 数値を省略した場合は暗黙的に0
  • 例:1.0.post1, 1.0a1.post2

プレリリース

  • 3段階:
    • アルファ版(a)
    • ベータ版(b)
    • リリース候補(rc)
  • 順序:alpha < beta < release candidate < 正式リリース
  • 例:1.0a1, 1.0b2, 1.0rc3

有効なバージョンの例

1.0
1.2.3
1.0a1 # アルファ版
1.0b2 # ベータ版
1.0rc3 # リリース候補
1.0.post1 # ポストリリース
1.0.dev1 # 開発版
1.0a1.dev1 # アルファ版の開発版
1.0.post1.dev1 # ポストリリースの開発版
2!1.0 # エポック付き

バージョンの順序は以下のようになります。

1.0.dev1 < 1.0a1 < 1.0a1.post1 < 1.0b1 < 1.0rc1 < 1.0 < 1.0.post1