プロジェクト設定したい(pyproject.toml

pyproject.tomlは2016年にPEP518で導入されたプロジェクトの定義ファイルです。 従来のsetup.pyなどに代わる新しいPython標準となっています。

注釈

PEP518が提案されたときは、まだ標準のTOMLパーサーが存在しなかったはずです。 どうしてTOML形式を選んだのかは謎です。 Python3.11になってようやくtomllib(読み取り専用)が標準モジュールとして追加されました。

参考までに、このドキュメントのpyproject.tomlを表示しておきます。

[project]
name = "kumaroot"
description = "KumaROOT"
readme = "README.md"
license = "MIT"
authors = [{name="Shota Takahashi (KMI)", email="<shotakaha@kmi.nagoya-u.ac.jp>"}]
urls = {"homepage" = "https://kumaroot.readthedocs.io/ja/latest/", "repository" = "https://github.com/shotakaha/kumaroot"}
version = "1.44.3"
requires-python = ">=3.12"

[tool.poetry]
package-mode = false

[tool.poetry.dependencies]
#sphinx = "^6.1.3"
myst-parser = "^4.0.0"
sphinx-design = "^0.6.0"
sphinx-copybutton = "^0.5.2"
sphinx-rtd-theme = "^3.0.0"
sphinxcontrib-mermaid = "^1.0.0"
sphinx-tags = "^0.4"
sphinxext-opengraph = "^0.9.1"
matplotlib = "^3.8.3"
sphinx = "^8.0.2"
sphinxcontrib-googleanalytics = "^0.4"

[tool.poetry.group.dev.dependencies]
#ipykernel = "^6.16.0"
#beautifulsoup4 = "^4.11.1"
#fake-useragent = "^1.1.1"
commitizen = "^3.12.0"
pandas = "^2.1.4"
pendulum = "^3.0.0"
sphinx-autobuild = "^2024.2.4"
japanize-matplotlib = "^1.1.3"
ipykernel = "^6.29.1"
scikit-learn = "^1.4.1.post1"
geopandas = "^1.0.1"
jupyter-bokeh = "^4.0.4"
geodatasets = "^2024.7.0"
cartopy = "^0.24.1"
geoviews = "^1.12.0"
tqdm = "^4.66.4"
uproot = "^5.3.10"
pydantic = "^2.8.2"
httpx = "^0.28.1"
pexpect = "^4.9.0"
python-dotenv = "^1.0.1"
hvplot = "^0.11.2"


[tool.poetry.group.mystmd.dependencies]
nodeenv = "^1.8.0"
mystmd = "^1.3.6"


[tool.poetry.requires-plugins]
poetry-plugin-export = ">=1.8"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.commitizen]
name = "cz_conventional_commits"
version = "1.44.3"
tag_format = "v$version"
version_files = [
    "pyproject.toml:version",
    "docs/source/conf.py:version",
    "docs/source/conf.py:release",
]

プロジェクトしたい([project]

 1[project]
 2name = "プロジェクト名"
 3version = "M.m.p"
 4description = "説明"
 5readme = "README.md"
 6requires-python = "^3.11"
 7license = "MIT"
 8authors = [
 9    {name="名前", email="メールアドレス"},
10    {name="名前", email="メールアドレス"},
11]
12maintainers = [
13    {name="名前", email="メールアドレス"},
14    {name="名前", email="メールアドレス"},
15]
16keywords = []
17classifiers = []
18
19[project.urls]
20homepage = "URL"
21repository = "URL"
22document = "URL"
23
24[project.scripts]
25cli_name = "パッケージ名.モジュール名:関数名"

[project]にプロジェクト設定を記述します。 設定項目はpyproject.toml specificationを参照してください。 また、パッケージ管理ツールのドキュメントにある設定例も参照するとよいです。

requires-pythonでPython環境のバージョン要件を指定できます。 等号や不等号などを使って互換性のあるバージョンを指定できます。

記法

対象

>=3.11

3.11 以上(Python4を含む)

<=3.11

3.11 以下

>=3.11,<3.12

3.11 以上 3.12未満

==3.11

3.11 のみ

==3.11.*

3.11 系のみ

~=3.11

3.11 系のみ

~=3.11.0

3.11.0 系のみ

!=3.11

3.11 を除く

注釈

以前は^3.12のように^(キャレット)を使ってバージョン指定できましたが、 PEP440によりサポート外になりました。

ビルドシステムしたい([build-system]

1[build-system]
2requires = ["poetry-core>=1.0.0"]
3build-backend = "poetry.core.masonry.api"

[build-system]のセクションにビルドに使うツールを記述します。 上記サンプルはpoetryの設定です。

外部パッケージしたい([tool]

 1[tool.poetry]
 2package-mode = false
 3
 4[tool.commitizen]
 5name = "cz_conventional_commits"
 6version = "M.m.p"
 7tag_format = "$version"
 8version_files = [
 9    "pyproject.toml:version",
10    "docs/source/conf.py:version",
11    "docs/source/conf.py:release",
12]

[tool]のセクションに、外部パッケージの設定を記述します。 設定項目は、それぞれのパッケージのドキュメントを参照してください。

注釈

パッケージによっては独自ファイル名を使っている場合があります。 また、まだpyproject.tomlに対応していないパッケージも多くあります。

リファレンス