依存関係仕様🔗
プロジェクトの依存関係は、依存関係の種類とインストールするときに必要になる任意の制約に基づいて様々な形式で指定できます。
バージョン制約🔗
キャレット要件🔗
キャレット要件 を使うと、指定したバージョンへの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
は他のどんなバージョンとも適合しないと見なされます。
これらがキャレット要件とそれに許可されたバージョンの例です:
Requirement | Versions allowed |
---|---|
^1.2.3 | >=1.2.3 <2.0.0 |
^1.2 | >=1.2.0 <2.0.0 |
^1 | >=1.0.0 <2.0.0 |
^0.2.3 | >=0.2.3 <0.3.0 |
^0.0.3 | >=0.0.3 <0.0.4 |
^0.0 | >=0.0.0 <0.1.0 |
^0 | >=0.0.0 <1.0.0 |
チルダ要件🔗
チルダ要件 は更新できる最小バージョンを指定します。 メジャー、マイナー、パッチバージョンを指定するか、メジャー、マイナーバージョンだけを指定した場合は、パッチレベルのみ変更が許可されます。 メジャーバージョンだけを指定した場合は、マイナーレベルとパッチレベルの変更が許可されます。
~1.2.3
はチルダ要件の例です。
Requirement | Versions allowed |
---|---|
~1.2.3 | >=1.2.3 <1.3.0 |
~1.2 | >=1.2.0 <1.3.0 |
~1 | >=1.0.0 <2.0.0 |
ワイルドカード要件🔗
ワイルドカード要件 を使うと、ワイルドカードの位置に最も近い(依存関係の依存している方)バージョンが許可されます。
*
, 1.*
, 1.2.*
はワイルドカード要件の例です。
Requirement | Versions allowed |
---|---|
* | >=0.0.0 |
1.* | >=1.0.0 <2.0.0 |
1.2.* | >=1.2.0 <1.3.0 |
不等要件🔗
不等要件 を使うと、バージョンの範囲や依存している厳密なバージョンを自分の手で指定できます。
これらが不等要件の例です:
>= 1.2.0
> 1
< 2
!= 1.2.3
厳密要件🔗
パッケージの厳密なバージョンを指定できます。 この指定は、このバージョンかつこのバージョンのみをインストールするようPoetryに指示します。 他の依存関係が別のバージョンを要求した場合は、ソルバーは最終的には失敗し、インストールや更新の手続きを中止します。
複合要件🔗
複数のバージョン要件は、コンマ区切りで並べられます。例えば、 >= 1.2, < 1.5
などです。
git
依存関係🔗
git
レポジトリにあるライブラリに依存するための、指定する必要のある最小限の情報はgitをキーとするレポジトリの場所です:
[tool.poetry.dependencies]
requests = { git = "https://github.com/requests/requests.git" }
これ以外の情報を指定していないので、Poetryは master
ブランチの最新のコミットを使いプロジェクトをするつもりなのだと仮定します。
git
キーと rev
キー, tag
キー, branch
キーを組み合わせて、それ以外のものも指定できます。
これが、 next
という名前のブランチの最新のコミットを使いたいことを指定する例です:
[tool.poetry.dependencies]
# Get the latest revision on the branch named "next"
requests = { git = "https://github.com/kennethreitz/requests.git", branch = "next" }
# Get a revision by its commit hash
flask = { git = "https://github.com/pallets/flask.git", rev = "38eb5d3b" }
# Get a revision by its tag
numpy = { git = "https://github.com/numpy/numpy.git", tag = "v0.13.2" }
path
依存関係🔗
ローカルディレクトリやローカルファイルにあるライブラリに依存するために、 path
属性が使えます:
[tool.poetry.dependencies]
# directory
my-package = { path = "../my-package/", develop = false }
# file
my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }
注意
poetry 1.1 以前のディレクトリのpath依存関係はデフォルトで編集可能モードでインストールされます。全てのpoetryバージョンと振る舞いを揃えるには、
develop
属性を明示的に設定する必要があります。
url
依存関係🔗
リモートアーカイブにあるライブラリに依存するために、 url
属性が使えます:
[tool.poetry.dependencies]
# directory
my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" }
対応する add
呼び出しはこれです:
poetry add https://example.com/my-package-0.1.0.tar.gz
Python制限依存関係🔗
ある依存関係を特定のバージョンのPythonでだけインストールする、という指定もできます:
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7" }
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7 || ^3.2" }
環境マーカーの使用🔗
依存関係のためのより複雑なインストール条件が必要な場合、Poetryは markers
属性で
環境マーカー
に対応しています:
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", markers = "python_version ~= '2.7' or sys_platform == 'win32'" }
複数制約依存関係🔗
あるときは、対象のPythonバージョンに依存して、依存関係に異なるバージョン範囲が設定されることがあります。
バージョン1.9まではPython 3.0未満、2.0以降はPython 3.4以上というPythonとの互換性を持つパッケージ foo
への依存関係があるとしましょう:
このとき次のように宣言します:
[tool.poetry.dependencies]
foo = [
{version = "<=1.9", python = "^2.7"},
{version = "^2.0", python = "^3.4"}
]
依存関係指定文法の拡張🔗
より複雑な依存関係指定をする場合では、非常に長く読みづらい行が出来上がっているのが分かるでしょう。この場合では、"inline table" 文法を使っていたところを "standard table" 文法へ移し替えられます。
役に立ちそうな例を次に出します:
[tool.poetry.dev-dependencies]
black = {version = "19.10b0", allow-prereleases = true, python = "^3.6", markers = "platform_python_implementation == 'CPython'"}
1行にすると読み下すことが多いです。これをもう少し簡単に扱えるようにするには、次のようにできます:
[tool.poetry.dev-dependencies.black]
version = "19.10b0"
allow-prereleases = true
python = "^3.6"
markers = "platform_python_implementation == 'CPython'"
同じ情報が全てしっかり残っていて、厳密に同じ指定になっています。この文法は分かりやすく分割されていて、ちょっと読み易い、記述になっています。
注意
制約は (python
のように) 異なる要件で なければならず 、
そうでない場合は、依存関係の解決でエラーが発生します。