Hatchを使ってsetup.pyをpyproject.tomlに移行する#

Hatch は、プロジェクトに既に setup.py ファイルがある場合に、プロジェクトの pyproject.toml ファイルを生成するのに便利です。

注釈

このステップは必要なく、プロジェクトに既に setup.py ファイルが定義されている場合にのみ有用です。

学習目標

このレッスンで学ぶこと:

  1. すでに setup.py が定義されているプロジェクトで pyproject.toml を使用するように移行するために Hatch を使用するプロセスです。

Hatchとは何か?#

Hatch は Python パッケージマネージャで、Python パッケージの作成、管理、配布のプロセスを効率化するように設計されています。新しいプロジェクトの作成、依存関係 の管理、ディストリビューションのビルド、PyPI のようなリポジトリへのパッケージの公開といったタスクのための便利な CLI (Command-Line Interface) を提供します。

Hatchを知る

詳しくは Hatch を知る を参照してください。

前提条件#

始める前に、システムにHatchがインストールされていることを確認してください。pipでインストールできます:

pipx install hatch

サンプルディレクトリツリー#

それでは、 hatch init を使う前と後のディレクトリツリー構造のサンプルを見てみましょう:

hatch init 前#

project/
│
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── module.py
│
├── tests/
│   └── test_module.py
│
└── setup.py

hatch init 後#

project/
│
├── pyproject.toml
│
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── module.py
│
├── tests/
│   └── test_module.py
│
└── setup.py

ご覧のように、 hatch init を実行した後の主な変化は、プロジェクトディレクトリに pyproject.toml ファイルが追加されたことです。

ステップバイステップガイド#

では、Hatchを使ってプロジェクトの pyproject.toml ファイルを作成する手順を説明しましょう。

  1. プロジェクトディレクトリに移動する: ターミナルかコマンドプロンプトを開き、Pythonプロジェクトがあるディレクトリに移動します。

  2. Hatchの初期化: 以下のコマンドを実行し、プロジェクトディレクトリのHatchを初期化します:

    hatch new --init
    
  3. レビューとカスタマイズ: 先ほどのコマンドを実行すると、Hatch は既存のプロジェクト構成に基づいて pyproject.toml ファイルを自動的に生成します。生成された pyproject.toml ファイルの内容を確認するのに時間をかけてください。プロジェクトの要件に応じて、特定の設定や依存関係をカスタマイズしたいかもしれません(pyproject.toml の詳細については pyproject.toml チュートリアル を参照してください)。

  4. 検証: pyproject.toml ファイルがプロジェクトの構成と依存関係を正確に反映していることを確認します。ファイルを手動で編集することもできますが、慎重に構文が正しいことを確認してください。

  5. setup.py を削除する: pyproject.toml のみを使用するように移行するので、 setup.py ファイルは不要になります。 プロジェクトディレクトリから安全に削除できます。

  6. テストビルド: 先に進む前に、 pyproject.toml ファイルだけを使ってプロジェクトが正常にビルドされることを確認する必要がある。 以下のコマンドを実行してプロジェクトをビルドします:

hatch build

このコマンドは pyproject.toml ファイルの仕様に基づいてプロジェクトをビルドします。 ビルドの過程でエラーや警告がないか、必ず確認してください。

  1. 既存機能のテスト: pyproject.toml でプロジェクトのビルドに成功したら、 プロジェクトの既存の機能が損なわれないようにすることが重要です。既存のテストを実行し、すべてが期待通りに動作することを確認します。