【要約】uv を導入し、自作のクラスをデフォルトでインポートできるようにする [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、プロジェクト内の共通モジュールをインポートする際、パス解決の手法に課題を抱える。従来の慣習的な手法では、以下の問題が発生する。
- ・
sys.path.appendを用いた動的なパス追加は、コードの可読性を著しく低下させる。 - ・実行環境に依存した記述は、チーム開発における環境の不一致や再現性の欠如を招く。
- ・
src layoutを採用すると、パッケージの階層が深くなり、標準的なインポートが困難になる。
// Approach
開発者は、
uv と hatchling を組み合わせ、プロジェクト自体をパッケージとして定義する手法を採用する。具体的な手順は以下の通りである。- ・
uv initを実行し、プロジェクトの基盤を構築する。 - ・
pyproject.tomlのbuild-systemにhatchlingを指定する。 - ・
tool.hatch.build.targets.wheelのpackages設定で、ソースコードの所在を明示する。 - ・
uv syncを実行し、.pthファイルを介したeditable installを実現する。
// Result
開発者は、
uv を用いることで、自作パッケージを標準ライブラリと同様に扱える環境を手に入れる。これにより、以下の成果が得られる。- ・
sys.path.appendを完全に排除でき、コードの健全性が向上する。 - ・
uv.lockにより、チーム内で同一の依存環境を即座に再現できる。 - ・Jupyter Notebook 等の外部ツールからも、作成したカーネルを通じて容易にアクセス可能になる。
Senior Engineer Insight
> 非常に実践的で、モダンなPython開発における「正解」の一つだ。
sys.path.append という場当たり的な解決を排除し、pyproject.toml による宣言的な管理へ移行することは、長期的なメンテナンスコストを劇的に下げる。特に、共通ロジックが肥大化しやすいデータサイエンスの現場では、src layout と editable install の組み合わせは必須と言える。ただし、import 名とプロジェクト名の乖離には注意が必要だ。