コンテンツにスキップ

Dependency specification

プロジェクトの依存関係は、さまざまな形式で指定できます。この形式は、依存関係のタイプと、インストールに必要なオプションの制約によって異なります。

Version constraints

Caret requirements

Caret requirements SemVerと互換性のある特定のバージョンへの更新を許可します。 新しいバージョン番号がメジャー、マイナー、パッチグループの左端の0以外の桁を変更しない場合、更新が許可されます。たとえば、以前にpoetry add requests@^2.13.0を実行し、ライブラリを更新したいと思ってpoetry update requestsを実行した場合、poetryはバージョン2.14.0が利用可能であればそれに更新しますが、3.0.0には更新しません。代わりにバージョン文字列を^0.1.13と指定した場合、poetryは0.1.14に更新されますが、0.2.0には更新されません。0.0.xは他のバージョンと互換性があるとは見なされません。

以下に、Caret requirementsの例と、それによって許可されるバージョンをいくつか示します。

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

Tilde requirements

Tilde requirementsは、何らかの更新機能を備えた最小バージョンを指定します。 メジャーバージョン、マイナーバージョン、およびパッチバージョンを指定するか、メジャーバージョンとマイナーバージョンのみを指定すると、パッチレベルの変更のみが許可されます。 メジャーバージョンのみを指定した場合は、マイナーレベルおよびパッチレベルの変更が許可されます。

~1.2.3 is an example of a tilde requirement.

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

Wildcard requirements

Wildcard requirementsは、ワイルドカードが配置されている最新の(依存関係に依存する)バージョンを許可します。

*1.*1.2.*はワイルドカードの必要条件の例です。

Requirement Versions allowed
* >=0.0.0
1.* >=1.0.0 <2.0.0
1.2.* >=1.2.0 <1.3.0

Inequality requirements

Inequality requirementsでは、依存するバージョンの範囲または正確なバージョンを手動で指定できます。

次に、不等式の要件の例をいくつか示します。

>= 1.2.0
> 1
< 2
!= 1.2.3

Multiple requirements

複数のバージョン要件は、例えば>=1.2, <1.5のように、コンマで区切ることもできます。

Exact requirements

パッケージの正確なバージョンを指定できます。

1.2.3は正確なバージョン指定の例です。

これは、このバージョンとこのバージョンのみをインストールするようにPoetryに指示します。 他の依存関係が異なるバージョンを必要とする場合、ソルバーは最終的に失敗し、インストールまたは更新手順を中止します。

正確なバージョンは、PEP 440に従って==で指定することもできます。

==1.2.3はその一例です。

Using the @ operator

poetry addで依存関係を追加する場合は、@演算子を使用できます。 これは==構文と同様に理解されますが、pyproject.tomlで有効な任意の指定子を前に付けることもできます。例えば:

poetry add django@^4.0.0

上記は、pyproject.tomlの次のエントリに変換されます。

Django = "^4.0.0"

特別なキーワードlatest@演算子によっても解釈されます。

poetry add django@latest

上記は、djangoの最新リリースが4.0.5であると仮定すると、pyproject.tomlの次のエントリに変換されます。

Django = "^4.0.5"

Extras

Extrasと@は期待通りに組み合わせることができます(package[extra]@version):

poetry add django[bcrypt]@^4.0.0

git dependencies

gitリポジトリにあるライブラリに依存するには、gitキーでリポジトリの場所を指定する必要があります。

[tool.poetry.dependencies]
requests = { git = "https://github.com/requests/requests.git" }

他の情報は何も指定していないので、Poetryはプロジェクトを構築するためにmainブランチの最新のコミットを使用することを想定しています。

gitキーとbranchキーを組み合わせて別のブランチを使用することができます。 あるいは、revまたはtagを使用して、それぞれ特定のコミットハッシュまたはタグ付きrefに依存関係を固定します。次に例を示します。

[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" }

インストールするパッケージがVCSリポジトリのサブディレクトリにある場合は、pipが提供するものと同様に、subdirectoryオプションを使用できます。

[tool.poetry.dependencies]
# Install a package named `subdir_package` from a folder called `subdir` within the repository
subdir_package = { git = "https://github.com/myorg/mypackage_with_subdirs.git", subdirectory = "subdir" }

これに対応するadd呼び出しがあります。

poetry add "git+https://github.com/myorg/mypackage_with_subdirs.git#subdirectory=subdir"

プライベートリポジトリなどでSSH接続を使用するには、次の構文例を使用します。

[tool.poetry.dependencies]
requests = { git = "git@github.com:requests/requests.git" }

gitリポジトリでHTTP基本認証を使用するには、repository credentialsが設定される方法と同様の資格情報を設定できます。

poetry config repositories.git-org-project https://github.com/org/project.git
poetry config http-basic.git-org-project username token
poetry add git+https://github.com/org/project.git

Note

Poetry 1.2リリースでは、デフォルトのgitクライアントとしてDulwichが使用されています。

gitcredentialsが使用されている場合は、レガシーシステムのgitクライアント実装に戻ります。 このフォールバックは将来のリリースで削除され、gitcredentialsヘルパーがネイティブにサポートされるようになります。

Poetry 1.2より前に動作していたデフォルト実装で問題が発生した場合は、シェルのサブプロセス呼び出しを使用して、システムgitクライアントの使用を明示的に設定することができます。

poetry config experimental.system-git-client true

ただし、そうすることで、システムgitクライアントの使用によって引き起こされた1.2より前のバージョンに存在していたバグが表面化することに注意してください。

path dependencies

ローカルディレクトリまたはファイルにあるライブラリに依存するには、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" }

Note

poetry 1.1以前では、ディレクトリパスの依存関係はデフォルトで編集可能モードでインストールされていました。すべてのpoetryバージョンで動作が同じになるように、develop属性を明示的に設定する必要があります。

url dependencies

リモートアーカイブにあるライブラリに依存するには、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

Dependency extras

ここに示すように、依存関係にPEP-508 Extrasを指定できます。

[tool.poetry.dependencies]
gunicorn = { version = "^20.1", extras = ["gevent"] }

Note

これは、依存関係に定義されたextraを有効にします。プロジェクト内のextraにオプションの依存関係を設定するには、extrasを参照してください。

source dependencies

alternate repositoryからのパッケージに依存するには、sourceプロパティを使用します。

[[tool.poetry.source]]
name = "foo"
url = "https://foo.bar/simple/"
priority = "supplemental"

[tool.poetry.dependencies]
my-cool-package = { version = "*", source = "foo" }

これに対応するadd呼び出しがあります。

poetry add my-cool-package --source foo

Note

この例では、fooが正しく設定されていることを想定しています。詳細については、using a private repositoryを参照してください。

Python restricted dependencies

特定のPythonバージョンに対してのみ依存関係をインストールするように指定することもできます。

[tool.poetry.dependencies]
tomli = { version = "^2.0.1", python = "<3.11" }
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "^3.2" }

Using environment markers

依存関係に対してより複雑なインストール条件が必要な場合、Poetryはmarkersプロパティを介してenvironment markersをサポートします。

[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", markers = "python_version <= '3.4' or sys_platform == 'win32'" }

Multiple constraints dependencies

ターゲットPythonのバージョンに応じて、依存関係のバージョン範囲が異なる場合があります。

バージョン1.9までのPython 3.6-3.7と互換性があり、バージョン2.0以降のPython 3.8+と互換性があるパッケージfooに依存しているとします。

次のように宣言します。

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = ">=3.6,<3.8"},
    {version = "^2.0", python = ">=3.8"}
]

Note

制約は(pythonのように)異なる要件を持たなければなりません。さもなければ、依存関係の解決時にエラーが発生します。

Combining git / url / path dependencies with source repositories

直接起点(git/url/path)依存関係は、相互に排他的なマーカーが使用されている場合でも、明示的にソースを指定しない依存関係の要件を満たすことができます。たとえば、次の例では、urlパッケージも2番目の要件の有効なソリューションになります。

foo = [
    { platform = "darwin", url = "https://example.com/example-1.0-py3-none-any.whl" },
    { platform = "linux", version = "^1.0" },
]

場合によっては、特定の条件(つまり、特定のプラットフォーム/アーキテクチャのPyPIでは利用できないコンパイルされたパッケージ)に対して直接の元の依存関係を使用し、他の場合にはソースリポジトリに頼ることもできます。この場合、別のsourceによって依存関係が満たされるように明示的に要求する必要があります。次に例を示します。

foo = [
    { platform = "darwin", url = "https://example.com/foo-1.0.0-py3-none-macosx_11_0_arm64.whl" },
    { platform = "linux", version = "^1.0", source = "pypi" },
]

Expanded dependency specification syntax

より複雑な依存性の指定の場合、非常に長く読みにくい行になることがあります。このような場合は、"インライン・テーブル"構文から"標準テーブル"構文に移行できます。

これが役立つ例を次に示します。

[tool.poetry.group.dev.dependencies]
black = {version = "19.10b0", allow-prereleases = true, python = "^3.7", markers = "platform_python_implementation == 'CPython'"}

1行として、これは消化すべきものがたくさんあります。これを少し簡単に操作するには、次のようにします。

[tool.poetry.group.dev.dependencies.black]
version = "19.10b0"
allow-prereleases = true
python = "^3.7"
markers = "platform_python_implementation == 'CPython'"

同じ情報がまだ存在し、最終的にはまったく同じ仕様が提供されます。それは単に複数の、少し読みやすい行に分割されています。