プロジェクト直下に、pyproject.toml, setup.py, tox.iniがあるときに、これらのファイルをどのように見ていけば良いのか、メモします。
結論から言うと、読み解く順番は以下の通りです。
-
pyproject.toml(まずはここを見る。現代の「正解」が書いてあるか確認) -
setup.py(tomlに情報がなければ、ここが「真の正解」) -
tox.ini(最後に、動かし方を確認)
1. pyproject.toml: プロジェクトの「今」を知る
役割: 現代の標準的な設定ファイル。
確認ポイント: 「このファイルが『主役』か『脇役』か?」を見極めます。
ファイルを開いて、以下のセクションがあるか探してみます。
Aパターン: [project] セクションがある場合
→ こちらが「主役(正解)」です。
ここに dependencies(依存ライブラリ)や scripts(エントリーポイント)が書かれています。
この場合、同階層にある setup.py は、古いツールとの互換性のために残されているだけの「抜け殻」に近い可能性が高いです。情報は pyproject.toml を信じます。
Bパターン: [tool.xxx] セクションしかない場合
→ こちらは「脇役(ツール設定用)」です。
[tool.ruff] や [tool.pytest.ini_options] など、ツールごとの設定しか書かれていない場合です。
この場合、依存ライブラリやプロジェクト定義の正解は setup.py にあります。 次へ進んでください。
2. setup.py: プロジェクトの「実体」を知る
役割: パッケージ化のロジック。
確認ポイント: pyproject.toml が「脇役」だった場合、こちらを「仕様書」として読みます。
-
install_requires=[...]: これが真の依存ライブラリ一覧です。 -
entry_points={...}: これがコマンドの入り口です。
【補足知識】 なぜ両方あるの?
pyproject.toml に移行したいけれど、完全に移行しきれていない(あるいは pip install -e . という開発モードインストールの互換性維持のため)という理由で、両方置いているプロジェクトは非常に多いようです。
「両方あるときは、内容が重複しているか、片方が片方を参照している」と考えます。
3. tox.ini: プロジェクトの「手順」を知る
役割: タスクランナー / テスト設定。
確認ポイント: 構成や依存関係を理解した後に見ます。
上記2つで「プロジェクトの構造」は分かりました。
tox.ini は「で、どうやってテスト回すの?」「Lintはどう実行するの?」という手順書として読みます。
まとめ: 脳内フローチャート
この3ファイルが並んでいたら、以下のフローで判断していくと良いです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
graph TD A[3ファイルを発見] --> B(pyproject.tomlを開く); B --> C{中に [project] セクションはあるか?}; C -- Yes --> D[pyproject.toml が正解]; D --> E(依存関係やエントリーポイントはここを読む); D --> F(setup.py は互換用なので無視してOK); C -- No --> G[setup.py が正解]; G --> H(pyproject.toml はRuffなどの設定置き場と判断); G --> I(依存関係やエントリーポイントは setup.py を読む); E --> J(最後に tox.ini でテスト実行コマンドを確認); F --> J; H --> J; I --> J; |
