My Tech Blog

個人的な備忘録が中心になると思います

uvでpythonのプロジェクトを管理する

最近uvを使い始めたので備忘録として簡単にまとめてみる

uvとは?

  • pythonのパッケージマネージャ兼プロジェクト管理ツール
  • npmのようにプロジェクト単位で依存ライブラリやpythonバージョンを管理できる
  • Rustで書かれており、非常に高速で動く

docs.astral.sh

使ってみる

# 初期化したいプロジェクトフォルダに移動
cd <project-dir>

# プロジェクトを初期化
uv init .

# .venvを作成
uv sync 

# pythonバージョン指定
uv python pin 3.12

# パッケージ追加
uv add <package-name>

# 開発時に使用するパッケージを追加
uv add --dev <package-name>

# パッケージを削除
uv remove <package-name>

# .venvで管理するpythonを起動する
uv run python

# 仮想環境を有効にする
source .venv/bin/activate

# 仮想環境を無効にする
deactivate

プロジェクト構成について

pythoのプロジェクト構成に関してはflatレイアウトとsrcレイアウトがあるが、

  • 外部パッケージとして開発する場合はsrcレイアウト
  • アプリケーションとして開発する場合はflatレイアウト で良さそう。 ※外部パッケージを開発する際にflatパッケージだとモジュールを直接参照する可能性があり、ビルドしたパッケージの挙動を正常にテストできなくなることがあるとのこと(テストではうまくいったのに、ビルド後に期待通り動かないといった問題が発生する可能性がある)

packaging.python.org

docs.astral.sh

パッケージを参照する

uvに限った話ではないが、パッケージをプロジェクトルートのappディレクトリに作成していて、別のディレクトリのモジュールからappモジュールを内部で参照したいときは、PYTHONPATHにappがあるパスを指定すれば良い。

# プロジェクトルートから実行する場合
PYTHONPATH=. uv run python ./scripts/hoge.py