今川館

都内勤務の地味OLです

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


以上