【Python】pyproject.toml, setup.py, tox.iniの見方(参画当初)

この記事は約4分で読めます。

プロジェクト直下に、pyproject.toml, setup.py, tox.iniがあるときに、これらのファイルをどのように見ていけば良いのか、メモします。

結論から言うと、読み解く順番は以下の通りです。

  1. pyproject.toml (まずはここを見る。現代の「正解」が書いてあるか確認)

  2. setup.py (tomlに情報がなければ、ここが「真の正解」)

  3. 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ファイルが並んでいたら、以下のフローで判断していくと良いです。

コード スニペット
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;

タイトルとURLをコピーしました