poetryのバージョンを指定する記号 "^" ハット/サーカムフレックス/キャレット
Caret requirements (キャレット要件)
poetryのpyproject.tomlでPythonパッケージのバージョンを指定する記号の意味がよくわからなくて調べた。
特に頻出して意味がわからなかったのが
[tool.poetry.dev-dependencies] coverage = "^4.5" flake8 = "^3.5"
この "^" 「ハット」とか「サーカムフレックス」とか「キャレット」と呼ばれる記号である。
これはpoetryのドキュメントでは「Caret requirements (キャレット要件)」というらしい。
上記の例だと、coverageは「>=4.5.0 <5.0.0」、flake8は「>=3.5.0 <4.0.0」という意味になるらしい。
https://poetry.eustace.io/docs/versions/#caret-requirements
Caret requirements allow SemVer compatible updates to a specified version. An update is allowed if the new version number does not modify the left-most non-zero digit in the major, minor, patch grouping.
この通り、一番左のゼロじゃない識別子(パート?)を繰り上げない範囲を示す。
だから、
helloworld = "^0.1.2"
ならば「>=0.1.2 <0.2.0」という意味になる。
ご親切に日本語訳もあるじゃないか。
https://cocoatomo.github.io/poetry-ja/versions/#_3
キャレット要件 を使うと、指定したバージョンへのsemantic versioningに適合した更新が行えます。
メジャー、マイナー、パッチという番号群のうち0でない最も左の数字を、新しいバージョン番号が更新しない場合に、更新が許可されます。
この場合に、 poetry update requests を実行したとすると、Poetryはもし利用可能ならバージョン 2.14.0 ヘ更新しますが、 3.0.0 には更新しません。
その変わりにバージョン文字列に ^0.1.13 を指定していた場合は、Poetryは 0.2.0 ではなく 0.1.14 へ更新します。
0.0.x は他のどんなバージョンとも適合しないと見なされます。
Tilde requirements (チルダ要件)
チルダ "~" を指定する方法もあるらしい。
https://poetry.eustace.io/docs/versions/#tilde-requirements
Tilde requirements specify a minimal version with some ability to update. If you specify a major, minor, and patch version or only a major and minor version, only patch-level changes are allowed. If you only specify a major version, then minor- and patch-level changes are allowed.
https://cocoatomo.github.io/poetry-ja/versions/#_4
チルダ要件 は更新できる最小バージョンを指定します。
メジャー、マイナー、パッチバージョンを指定するか、メジャー、マイナーバージョンだけを指定した場合は、パッチレベルのみ変更が許可されます。
メジャーバージョンだけを指定した場合は、マイナーレベルとパッチレベルの変更が許可されます。
Wildcard requirements (ワイルドカード要件)
ワイルドカードを使う方法も提供されていて、これが一番わかりやすい印象だった。
リンクのみ貼っておいて、詳しい説明は割愛。
https://poetry.eustace.io/docs/versions/#wildcard-requirements
https://cocoatomo.github.io/poetry-ja/versions/#_5
以上