パッケージ化
別プロジェクトで作成したファイルのクラスやメソッドを、パッケージ化して輸入する方法を示します。
そのためには、汎用性を意識してメソッドやクラスを作成する必要があります。DRYの原則
前提
project
├─ project1
└─ project2
- 環境はuv管理
実践
- 仮想環境設定
それぞれのプロジェクト内でuv initを実行し、独立した環境を作成します。
- メソッドの作成
project1/Src/iis/piyo1.pyのような構成でファイルを作成、メソッドを実装しました。
# project1/Src/iis/piyo1.py
def nice():
print("nice!")
if __name__ == "__main__":
nice()
# uv run piyo1
# -> nice!
このniceメソッドをパッケージ化して別プロジェクトでも使用したいです。
ファイルを同期して別プロジェクトで使用する方法もありますが、ここではパッケージ化して輸入する方法を載せました。
- project1内の
pyproject.tomlに以下を記載
tomlファイルはuv initを実行した時に自動で作成される設定ファイルです。
[build-system]
requires = ["hatchling>=1.25"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
only-include = ["Src/iis"]
sources = ["Src"]
内容は、Src/iis内のファイルをパッケージとして認識してもらう。です。
- project1内で
uv buildを行う
project1にdistフォルダが作成されます。これで、別プロジェクトでファイルを輸入する準備が整いました。
もし、上の階層(project)に.gitや.tomlがある場合はそちらに/distが作成されるかも。その時は、
uv build --out-dir distです。
project2に移動後
-
uv add ../project1/dist/project1-0.1.0-py3-none-any.whl
これでproject1/Src/iis内のファイルを輸入する事が出来ます。
project2/piyo2.pyを作成、確かめてみます。
# project2/piyo2.py
from iis.piyo1 import nice
nice()
# uv run piyo2
# -> nice!
お疲れ様でした。