🌻uvだけでPythonプロジェクトを管理するcolum21312024/08/22に公開2024/08/26Python環境構築RyeuvtechチューリングのE2E自動運転チームの岩政(@colum2131)です。2024年8月20日にuvのマイナーバージョンが0.3.0にアップデートされました。pipの代替として設計されていたuvが、Pythonのバージョン管理からパッケージ管理まで行えると発表されました。将来的には、uvがRyeに代替されるようと書きましたが、実際、RyeやPoetryなどの代替としてuvのみでPythonのプロジェクト管理が可能になりました。Ryeで行っていた操作同様にuvで実行できるようになった印象もあります。https://zenn.dev/turing_motors/articles/0f1a764d14f581チューリングのメンバーでも熱心なuvファンがいるため、本記事では、uvの基本操作や、便利な機能をまとめます。uvの基本操作uvの公式ドキュメントはuvで整備されています。startedに従ってインストールすることができます。OSまたはLinuxの場合は以下です。-lなどでshellを再読み込みを行うとuvを起動できます。今回用いるuvのバージョンは以下です。0.3.1また、PyPIからもuvのinstallが可能です。新規プロジェクトの初期化Rye同様にinitで新規プロジェクトを作成することができます。my-projectは任意のプロジェクト名です。initだけで作成できます。my-projectすると以下のディレクトリ構造が作成されて、pyproject.tomlも自動で生成されます。__init__.pypyproject.tomlの中身は以下のようになっています。パッケージの同期pyproject.tomlをもとにパッケージをインストールします。以下のコマンドを実行できます。syncRye同様に仮想環境として.venvが作成されて、また、uv.lockというlockファイルが生成されます。仮想環境のアクティベート以下のコマンドで仮想環境を有効化できます。.venv/bin/activate無効化する場合は以下を実行します。Pythonバージョン変更Rye同様にpinコマンドでPythonのバージョンを変更することが可能です。.python-versionファイルも生成されます。initの引数に--pythonまたは-pにバージョンを指定すれば良いです。syncで更新することも可能です。versionsを参照してください。addでパッケージを追加することが可能です。以下でnumpyをインストールします。numpyバージョンを指定することも可能です。removeでパッケージを取り除くことも可能です。-rからインストールすることも可能です。--devで開発用の依存パッケージとしてインストールすることも可能です。--devpyproject.tomlでは以下が追加されます。listで確認できます。runで実行可能です。main.pyとして以下のスクリプトが存在するとき、print("Hello!")以下のコマンドで実行することができます。initでなくても仮想環境だけを作成することができます。引数でターゲットパスを指定することができ、指定しない場合はカレントディレクトリに.venvを作成します。仮想環境が存在する場合は削除されて、新しい仮想環境を作成します。my-project-venv--pythonまたは-pでPythonのバージョンを指定することが可能です。installでインストールできます。listで確認できます。interfaceを参照してください。uvxを利用したツールの呼び出しuvxはツールをインストールせずに呼び出すことが可能です。高速なPythonのリンターおよびコードフォーマッターであるruffを以下で呼び出すことが可能です。ruffと同様のものです。ruff特定のバージョンで実行することができます。check特にruffなどの場合、そのプロジェクト下のpyproject.tomlの設定を用います。ruffやmypyなどの設定はこちらを参考にしてください。toolsを確認してください。wheelのパスなどをインストールすることが可能です。URLで特定のwheelを指定する場合だと以下のようにできます。https://files.pythonhosted.org/packages/f7/29/13965af254e3373bceae8fb9a0e6ea0d0e571171b80d6646932131d6439b/setuptools-69.5.1-py3-none-any.whlpyproject.tomlには新しく[tool.uv.sources]が追加されます。[tool.hatch.build.targets.wheel]によるモジュールアクセスRye同様に[tool.hatch.build.targets.wheel]をpyproject.tomlに記載して、ディレクトリ構造を気にすることなくモジュールをimportすることが可能になります。versionにあっURLをpyproject.tomlのextra-index-urlを追加します。["https://download.pytorch.org/whl/cu121"]追加後に以下のコマンドでCUDA依存のPyTorchをインストールすることが可能です。"[https://pypi.org/simple](https://pypi.org/simple)"が指定されています。優先度を上げることが必要な状況なら以下のように記載すれば良さそう?です。Settings#index-urlを参照してください。["https://pypi.org/simple"]find-linksも[tool.uv]で同様に設定可能です。アーキテクチャごとにインストールするパッケージを変更する場合は、こちらの記事が強く参考になりました。Action、Pre-commitなどにおけるuvを統合する際のベストプラクティスが記載されています。flash-attentionをインストールするflash-attentionはtransformerモデルを高速に処理するための技術でflash-attnとしてパッケージ化されています。こちらをuvでinstallする方法を以下でまとめました。おわりにいよいよuvだけでPythonのプロジェクト管理が完結しそうです。そもそもRyeと比較してuvの良かった機能として、cross-platform対応したwheelのURLがlockファイルに生成されていることがありました。今回のアップデートでRyeと同様の操作感で扱えるものになり、おそらくチューリングではPythonのプロジェクト管理はuvを中心に使っていくと思います。今回のアップデートや公式ドキュメントが公開されたため、まだ知らない機能もあり、便利そうな機能は適宜追加していきます。紹介した機能で誤りもあるかもしれないため、コメントで教えていただけるとありがたいです。Tesla」を掲げ、LV5完全自動運転EVを開発するAIテクノロジースタートアップです。TuringPublicationLV5完全自動運転EVを開発するAIテクノロジースタートアップ・Turing株式会社の公式テックブログです。バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。