nikkie-ftnextの日記

イベントレポートや読書メモを発信

素振りの記:自分だけのクソライブラリ作りを通して、Hatchの機能に触れる

Pythonのパッケージ管理ツールを触り出す上での禊1

目次

気になるHatch

Python Monthly Topicsで紹介された機能を触るために

からあげさんの記事「Pythonで自分だけのクソライブラリを作る方法」を組み合わせることにしました。

% hatch --version
Hatch, version 1.9.7
% hatch run python -V
Python 3.12.0

Python Monthly Topicsよりバージョンが古いので、古いコマンドとなったように思われます)

Hatchで自分だけのクソライブラリを作る方法

% hatch new unko
unko
├── src
│   └── unko
│       ├── __about__.py
│       └── __init__.py
├── tests
│   └── __init__.py
├── LICENSE.txt
├── README.md
└── pyproject.toml

プロジェクトの雛形が作られました。

クソライブラリの実装(2点)

src/unko/unko.pyを追加

def deru():
    print("puripuri")

src/unko/__init__.pyを編集(スマートなimportのために)

# SPDX-FileCopyrightText:
#
# SPDX-License-Identifier:

+from unko.unko import deru  # NOQA

Hatchの機能をお試し

Python Monthly Topicsで見かけた機能を試していきます。

フォーマッタ

% hatch fmt
src/unko/unko.py:2:5: T201 `print` found
Found 1 error.

Ruffが流れているという理解です。
unkoのコアのprint文なので無視するように鎮める方法は宿題です

テスト

unkoのテストコードを書きます。

from unko import deru


def test_deru(capsys):
    deru()
    assert capsys.readouterr().out == "puripuri\n"
% hatch run test  # default env の test script 実行と思われる
============================= test session starts ==============================
platform darwin -- Python 3.12.0, pytest-8.3.2, pluggy-1.5.0
rootdir: /.../unko-by-hatch
configfile: pyproject.toml
collected 1 item

tests/test_unko.py .                                                     [100%]

============================== 1 passed in 0.01s ===============================

型チェック

% hatch run types:check  # types env の check script 実行
Success: no issues found in 5 source files

hatch newで作られたpyproject.tomlを読んでいくことでHatchの理解が深まりそうです。

色々触っているうちにできていたeditable install

% hatch shell
(unko) % python
>>> from unko import deru
>>> deru()
puripuri

まずこれを試したらImportErrorとなりました。
どうやらテスト実行でdefault envができたときにeditable installされたような雰囲気です2
puripuriを他の文字列に変えて再度importすると、出力が変わりました

今回のコード

終わりに

Hatchを使って簡単なクソライブラリを作ってみました。
今回自分では依存をインストールしていなくて、そこは体験が全然違いました。
手を動かしたことでpyproject.tomlがごついんだなという感想です。
読み解いていくぞ〜

先人による参考記事


  1. Ryeとの禊
  2. editable installまわりはもうちょっと理解を深めたいです。積ん読 https://github.com/pypa/hatch/issues/588#issuecomment-1494729429