プロジェクト設定したい(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.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
に対応していないパッケージも多くあります。