uv + Ruffを使ったData Scienceプロジェクトテンプレート
はじめに
RuffやRyeで有名なAstralが2024年8月、Pythonのパッケージ管理としてuv (v0.3.0)のマイナーアップデートを発表しました。
pipやpyenvやpoetryに変わって超高速にpython自身のインストール・ライブラリ依存解決ができるとのことで、混沌としたPythonのパッケージ管理ツール界隈に終止符を打つのではないかと期待されています。
uvが最大限活用できるのは、pytorchやspacyなど比較的重くて依存解決に時間がかかる機械学習・NLP関連のライブラリを使う機会、つまりはデータサイエンティストのプロジェクトテンプレートではないかと思い、Cookiecutter Data Scienceをベースにしたuv+RuffのPythonプロジェクトテンプレートを作成しました。
作ったもの
uv-project-templateは、uvとRuffを使ったPythonプロジェクトテンプレートです。データサイエンティスト用のテンプレート: Cookiecutter Data Scienceをベースに一部カスタマイズしています。
動作環境
- OS: macOS Sonoma 14.4.1
- エディタ: Visual Studio Code(v1.93.0)
- uv: 0.4.4
- Cookiecutter: 2.5.0
プロジェクトの作成手順
- Cookiecutterを使用してテンプレートリポジトリを作成します。
cookiecutter https://github.com/kamiya-kakaku/uv-project-template.git
- プロンプトが表示されたら、適切で明確なプロジェクト名を入力します(単語はハイフンで区切る)。最初の二つのプロンプトは、入力したプロジェクト名に基づいてフォーマットされるので、そのままEnterキーを押すだけでも問題ありません。
project_name [My Python Project]: ai-xxxxxx
project_slug [ai-xxxxxx]:
package_name [ai_xxxxxx]:
- プロジェクトに使用するPythonのバージョンを設定します。この時指定したバージョンは
.python-version
として、uv venv
コマンドを実行した際に適用されます。
python_version [3.12.5]:
- cookiecutterで新しいPythonプロジェクトを作成した後、以下のコマンドを実行して仮想環境を有効化します。
uv sync
でlockfileも作成しましょう。
uv venv
source .venv/bin/activate
uv sync
開発の流れ
基本的な流れはpoetryやryeと同様です。uv add ~~
でライブラリをインストール・依存解決し、uv sync
でlockfileを作成します。
ローカルのPythonバージョンを変更したい場合は、以下を実行すれば.python-version
が更新され、venvのPythonバージョンが更新されます。
uv python pin 3.xx.x
uv sync
Ruffの静的解析の実行はPoethePoetで実行しています(ここだけまだPoetry時代の名残がありますが、poe
コマンドも問題なく使用出来ます)。
poe x
を実行すれば、isort, format, lintを機械的チェックしてくれます。
終わりに
私個人のPython開発体験はAstralによって支えられています。Pythonを使う皆様も、この際ちょっとずつ移行してみてはいかがでしょうか?
Discussion