🎃

uv + Ruffを使ったData Scienceプロジェクトテンプレート

2024/09/11に公開

はじめに

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プロジェクトテンプレートを作成しました。

作ったもの

https://github.com/kamiya-kakaku/uv-project-template

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

プロジェクトの作成手順

  1. Cookiecutterを使用してテンプレートリポジトリを作成します。
cookiecutter https://github.com/kamiya-kakaku/uv-project-template.git
  1. プロンプトが表示されたら、適切で明確なプロジェクト名を入力します(単語はハイフンで区切る)。最初の二つのプロンプトは、入力したプロジェクト名に基づいてフォーマットされるので、そのままEnterキーを押すだけでも問題ありません。
project_name [My Python Project]: ai-xxxxxx
project_slug [ai-xxxxxx]:
package_name [ai_xxxxxx]:
  1. プロジェクトに使用するPythonのバージョンを設定します。この時指定したバージョンは.python-versionとして、uv venvコマンドを実行した際に適用されます。
python_version [3.12.5]:
  1. 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