pyproject.toml ファイル

pyproject.toml ファイル #

pyproject.toml ファイルの tool.poetry セクションは、複数のセクションで構成されています。

package-mode #

Poetry がパッケージモード(デフォルト)で動作するかどうか。オプション

詳細については、基本的な使い方 を参照してください。

package-mode = false

name #

パッケージの名前。パッケージモードでは必須

これは、PEP 508 で定義されている有効な名前である必要があります。

name = "my-package"

version #

パッケージのバージョン。パッケージモードでは必須

これは、有効な PEP 440 文字列である必要があります。

version = "0.1.0"
注記
プロジェクトにセマンティックバージョニングを使用する場合は、こちら を参照してください。

description #

パッケージの簡単な説明。パッケージモードでは必須

description = "A short description of the package."

license #

パッケージのライセンス。

最も一般的なライセンスの推奨表記は(アルファベット順)

  • Apache-2.0
  • BSD-2-Clause
  • BSD-3-Clause
  • BSD-4-Clause
  • GPL-2.0-only
  • GPL-2.0-or-later
  • GPL-3.0-only
  • GPL-3.0-or-later
  • LGPL-2.1-only
  • LGPL-2.1-or-later
  • LGPL-3.0-only
  • LGPL-3.0-or-later
  • MIT

オプションですが、これを指定することを強くお勧めします。その他の識別子は、SPDXオープンソースライセンスレジストリ に記載されています。

license = "MIT"
注記
プロジェクトが独自のもので、特定のライセンスを使用していない場合は、この値を Proprietary に設定できます。

authors #

パッケージの作成者。パッケージモードでは必須

これは作成者のリストであり、少なくとも1人の作成者を含める必要があります。作成者は name <email> の形式である必要があります。

authors = [
    "Sébastien Eustace <sebastien@eustace.io>",
]

maintainers #

パッケージのメンテナー。オプション

これはメンテナーのリストであり、作成者とは区別する必要があります。メンテナーはメールを含めることができ、name <email> の形式である必要があります。

maintainers = [
    "John Smith <johnsmith@example.org>",
    "Jane Smith <janesmith@example.org>",
]

readme #

パッケージの README ファイルに対応するパスまたはパスのリスト。オプション

ファイルは任意の形式にできますが、PyPI に公開する場合は、PyPIフレンドリーなREADMEの推奨事項 を考慮してください。README のパスは、pyproject.toml を基準とする相対パスです。

注記

パスが大文字と小文字を区別するかどうかはプラットフォームのデフォルトに従いますが、大文字と小文字を区別しないことをお勧めします。

具体的には、macOS および Windows では README.md に対して readme = "rEaDmE.mD" を設定できますが、Linux ユーザーはリポジトリをクローンした後、poetry install を実行できません。これは、macOS と Windows は大文字と小文字を区別せず、大文字と小文字を保持するためです。

README ファイルの内容は、ディストリビューションのメタデータの Descriptionフィールド (setuptools の long_description と同様)を設定するために使用されます。複数のファイルが指定されている場合、それらは改行で連結されます。

[tool.poetry]
# ...
readme = "README.md"
[tool.poetry]
# ...
readme = ["docs/README1.md", "docs/README2.md"]

homepage #

プロジェクトの Web サイトへの URL。オプション

homepage = "https://poetry.dokyumento.jp/"

repository #

プロジェクトのリポジトリへの URL。オプション

repository = "https://github.com/python-poetry/poetry"

documentation #

プロジェクトのドキュメントへの URL。オプション

documentation = "https://poetry.dokyumento.jp/docs/"

keywords #

パッケージに関連するキーワードのリスト。オプション

keywords = ["packaging", "poetry"]

classifiers #

プロジェクトを説明する PyPI trove classifiers のリスト。オプション

[tool.poetry]
# ...
classifiers = [
    "Topic :: Software Development :: Build Tools",
    "Topic :: Software Development :: Libraries :: Python Modules"
]
注記

Python の分類子は自動的に追加され、python 要件によって決定されることに注意してください。

license プロパティは、ライセンスの分類子も自動的に設定します。

packages #

最終的なディストリビューションに含めるパッケージとモジュールのリスト。

プロジェクトの構造が poetry でサポートされている標準構造と異なる場合は、最終的なディストリビューションに含めるパッケージを指定できます。

[tool.poetry]
# ...
packages = [
    { include = "my_package" },
    { include = "extra_package/**/*.py" },
]

パッケージが "lib" ディレクトリ内に保存されている場合は、指定する必要があります

[tool.poetry]
# ...
packages = [
    { include = "my_package", from = "lib" },
]

to パラメーターは、インストール時にパッケージが配置される相対的な宛先パスを指定するために設計されています。これにより、プロジェクト構造内のパッケージの編成をより詳細に制御できます。

[tool.poetry]
# ...
packages = [
    { include = "my_package", from = "lib", to = "target_package" },
]

パッケージを特定のビルド形式に制限する場合は、format を使用して指定できます

[tool.poetry]
# ...
packages = [
    { include = "my_package" },
    { include = "my_other_package", format = "sdist" },
]

今後は、sdist ビルドアーカイブにのみ my_other_package パッケージが含まれます。

注記

packages を使用すると、パッケージの自動検出機能が無効になり、"デフォルト" パッケージを 明示的に 指定する必要があります。

たとえば、my_package という名前のパッケージがあり、extra_package という名前の別のパッケージも含めたい場合は、my_package を明示的に指定する必要があります

packages = [
    { include = "my_package" },
    { include = "extra_package" },
]
注記

Poetry は Python サブパッケージを検出するのに十分な賢さを持っています。

したがって、ルートパッケージが存在するディレクトリのみを指定する必要があります。

include と exclude #

最終パッケージに含めるパターンのリスト。

パッケージングの目的で、一連の glob を無視または含める必要があることを Poetry に明示的に指定できます。 exclude フィールドに指定された glob は、パッケージのビルド時に含まれないファイルのセットを識別します。

VCS がパッケージに使用されている場合、exclude フィールドには VCS の無視設定(たとえば、git の場合は .gitignore)が設定されます。

注記
include でエントリを明示的に宣言すると、VCS の無視設定が無効になります。
[tool.poetry]
# ...
include = ["CHANGELOG.md"]

ここで示すように、これらのパターンを含める必要がある形式を指定することもできます

[tool.poetry]
# ...
include = [
    { path = "tests", format = "sdist" },
    { path = "for_wheel.txt", format = ["sdist", "wheel"] }
]

形式が指定されていない場合、include はデフォルトで sdist のみになります。

対照的に、exclude はデフォルトで sdistwheel の両方になります。

exclude = ["my_package/excluded.py"]

dependencies と依存関係グループ #

Poetry は、デフォルトで PyPI での依存関係の検索を設定しています。この場合、名前とバージョン文字列のみが必要です。

[tool.poetry.dependencies]
requests = "^2.13.0"

プライベートリポジトリ を使用する場合は、次のように pyproject.toml ファイルに追加できます

[[tool.poetry.source]]
name = "private"
url = "http://example.com/simple"

複数のリポジトリが構成されている場合は、特定のパッケージを探す場所を poetry に明示的に指示できます

[tool.poetry.dependencies]
requests = { version = "^2.13.0", source = "private" }
注記

パッケージが対応する Python バージョンを宣言することは必須であることに注意してください。

[tool.poetry.dependencies]
python = "^3.7"

依存関係をよりきめ細かく管理するために、グループに整理できます。

[tool.poetry.group.test.dependencies]
pytest = "*"

[tool.poetry.group.docs.dependencies]
mkdocs = "*"

依存関係グループの管理方法の詳細については依存関係グループを、その他のキーとバージョン範囲の指定に関する詳細については依存関係の指定を参照してください。

scripts #

このセクションでは、パッケージのインストール時にインストールされるスクリプトまたは実行可能ファイルについて説明します。

[tool.poetry.scripts]
my_package_cli = 'my_package.console:run'

ここでは、my_package パッケージの console モジュールにある run 関数を実行する my_package_cli スクリプトがインストールされます。

注記
スクリプトを追加または更新した場合は、poetry install を実行して、プロジェクトの仮想環境で使用できるようにしてください。

extras #

Poetry は、以下を表現するために extras をサポートしています。

  • パッケージを強化するが必須ではないオプションの依存関係、および
  • オプションの依存関係のクラスター。
[tool.poetry]
name = "awesome"

[tool.poetry.dependencies]
# These packages are mandatory and form the core of this package’s distribution.
mandatory = "^1.0"

# A list of all of the optional dependencies, some of which are included in the
# below `extras`. They can be opted into by apps.
psycopg2 = { version = "^2.9", optional = true }
mysqlclient = { version = "^1.3", optional = true }

[tool.poetry.extras]
mysql = ["mysqlclient"]
pgsql = ["psycopg2"]
databases = ["mysqlclient", "psycopg2"]

Poetry でパッケージをインストールするときは、-E|--extras オプションを使用して extras を指定できます。

poetry install --extras "mysql pgsql"
poetry install -E mysql -E pgsql

指定しない extras はすべて削除されます。この動作は、install --with で指定されていないなど、インストール用に選択されていないオプションの依存関係グループとは異なることに注意してください。

--all-extras オプションを使用すると、すべての extras をインストールできます。

poetry install --all-extras
注記

install --extras および上記で説明したバリエーション (--all-extras--extras foo など) は、現在のプロジェクトで定義されている依存関係でのみ機能することに注意してください。依存関係によって定義された extras をインストールする場合は、依存関係自体でそれを表現する必要があります。

[tool.poetry.dependencies]
pandas = {version="^2.2.1", extras=["computation", "performance"]}
[tool.poetry.group.dev.dependencies]
fastapi = {version="^0.92.0", extras=["all"]}

Poetry でビルドされたパッケージをインストールまたは指定する場合、このセクションで定義された extras は、PEP 508で説明されているようにアクティブ化できます。

たとえば、pip を使用してパッケージをインストールする場合、databases extra に必要な依存関係は以下のようにインストールできます。

pip install awesome[databases]
注記

extra に指定された依存関係は、プロジェクトの依存関係として既に定義されている必要があります。

依存関係グループにリストされている依存関係を extras として指定することはできません。

plugins #

Poetry は任意のプラグインをサポートしており、これらはエコシステム標準のエントリポイントとして公開され、importlib.metadata を使用して検出できます。これは、setuptools のエントリポイント機能と同様であり、互換性があります。プラグインを登録するための構文は次のとおりです。

[tool.poetry.plugins] # Optional super table

[tool.poetry.plugins."A"]
B = "C:D"

以下のとおりです。

  • A - プラグインのタイプ。たとえば、poetry.plugin または flake8.extension など
  • B - プラグインの名前
  • C - Python モジュールのインポートパス
  • D - プラグインのエントリポイント (関数またはクラス)

例 (poetry-plugin-export から)

[tool.poetry.plugins."poetry.application.plugin"]
export = "poetry_plugin_export.plugins:ExportApplicationPlugin"

urls #

基本的な URL (homepagerepositorydocumentation) に加えて、urls セクションで任意のカスタム URL を指定できます。

[tool.poetry.urls]
"Bug Tracker" = "https://github.com/python-poetry/poetry/issues"

パッケージを PyPI に公開すると、それらは Project Links セクションに表示されます。

Poetry と PEP-517 #

PEP-517 は、Python プロジェクトをビルドするための代替ビルドシステムを定義する標準的な方法を導入しています。

Poetry は、軽量なコアライブラリを提供することで PEP-517 に準拠しています。したがって、Python プロジェクトの管理に Poetry を使用する場合は、次のように pyproject.toml ファイルの build-system セクションでそれを参照する必要があります。

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
注記
new または init コマンドを使用すると、このセクションが自動的に追加されます。
注記
pyproject.toml ファイルが依然として poetry をビルドバックエンドとして直接参照している場合は、代わりに poetry-core を参照するように更新する必要があります。