7 ポイント 投稿者 GN⁺ 2024-02-16 | 3件のコメント | WhatsAppで共有
  • uvはRustで書かれた超高速のPythonパッケージインストーラー兼リゾルバーで、pipおよびpip-toolsのワークフローを置き換えるために設計されている
  • uvは「Cargo for Python」を目指すマイルストーンであり、高速で信頼性が高く使いやすい、包括的なPythonプロジェクトおよびパッケージマネージャー
  • Ryeは、Armin Ronacherが実験的に開発したPythonパッケージングツールであり、その管理を引き継いでuvを統合された後継プロジェクトへと拡張する計画

パフォーマンスへの徹底したこだわり

  • uvはキャッシュなしでもpipおよびpip-toolsより8〜10倍高速で、キャッシュがある場合は80〜115倍高速
  • グローバルモジュールキャッシュを使用して依存関係を再ダウンロードまたは再ビルドせず、対応ファイルシステムではCopy-on-Writeとハードリンクを活用してディスク使用量を最小限に抑える。

導入しやすさの最適化

  • uvの初期リリースはpipおよびpip-tools APIをサポートしており、既存プロジェクトでも設定変更なしで利用できる。
  • uvは単一の静的バイナリとして提供され、pippip-toolsvirtualenvを置き換えられる。
  • Python自体とは別にインストールできるため、Pythonのバージョンごとにpipのインストールを管理する必要がない。

「Cargo for Python」: uvとRye

  • uvは、高速で信頼性が高く使いやすい、統合型のPythonパッケージ/プロジェクトマネージャーに向けた中間マイルストーンである。
  • uvはpippip-toolsvirtualenvだけでなく、pipxtoxpoetrypyenvruffなども含む単一バイナリを目指している。

互換API

  • pip installの代わりにuv pip installを使うことで、コマンドライン、要件ファイル、またはpyproject.tomlからPython依存関係をインストールできる。
  • pip-compileの代わりにuv pip compileを使って、ロックされたrequirements.txtを生成できる。
  • pip-syncの代わりにuv pip syncを使って、ロックされたrequirements.txtと仮想環境を同期できる。

ロードマップ

  • このリリース以降は、ユーザーサポートを優先しつつ、互換性・性能・安定性の向上に注力する計画。
  • その後は、uvを完全なPythonプロジェクト/パッケージマネージャーへ拡張することを目標としている。

謝辞

  • uvの開発に直接的または間接的に貢献したすべての人々に感謝を表している。
  • 特に、PubGrubの基盤となるバージョン解決機構としてuvで利用されているJacob FinkelmanとMatthieu Pizenbergに感謝する。

GN⁺の見解

  • uvはPython開発者に既存のpipツールよりはるかに高速な性能を提供し、プロジェクト設定時間を大幅に短縮できる革新的なツールである。
  • Rustで書かれており、Pythonエコシステムの中で性能と安定性を重視する新たなトレンドを反映していて、開発者体験を大きく向上させることが期待される。
  • uvの開発はPythonパッケージングおよびプロジェクト管理ツールの統合を志向しており、これにより開発者はより効率的で一貫した方法で作業できるようになるだろう。

3件のコメント

 
kyunghoon 2024-10-29

本当にものすごく速いですね;;

 
ajh508 2024-02-17

拡張されてcondaを置き換えられるようになるといいですね

 
GN⁺ 2024-02-16
Hacker Newsの意見
  • VC支援の pip-and-more への疑問

    • ベンチャーキャピタルの支援を受ける pip-and-more が、無料で資金が流れ込む状況が終わったときにどのように収益を上げるのか理解しにくい。
  • uv がプラットフォーム非依存の lockfile を生成しないことへの質問

    • uv が Poetry や PDM と違ってプラットフォーム非依存の lockfile を生成しない点について、このアプローチは requirements ファイルに依存しており、「Python の Cargo」を目指す方向性に合っていないのではないかと見る意見。
  • uv の代替依存関係解決戦略サポートへの肯定的な評価

    • uv はデフォルトで最新の互換パッケージバージョンを優先する標準的な Python 依存関係解決戦略に従うが、--resolution=lowest オプションにより、最も低い互換バージョンでテストできる機能を提供している。
    • uv が --python-version パラメータを通じて、現在インストールされている Python バージョンとは異なるバージョン向けの解決結果を生成できるのは素晴らしい。
  • Python パッケージシステムの複雑さへの疑問

    • Python インタプリタの価値観には「明確な方法は1つであるべきだ」という原則が含まれているのに、なぜパッケージングの話はこれほど複雑になったのかという疑問。
  • uv が pubgrub-rs を使っている点の興味深さ

    • uv が、もともと Dart 向けに書かれた pubgrub バージョン解決アルゴリズムの Rust 実装である pubgrub-rs を使っていることについて、このような発想の連鎖が言語をまたいで続いていくのを見るのは面白いという評価。
  • Astral チームの進路予測への言及

    • Astral チームが ruff の機能を拡張し、Python 開発者が必要とするあらゆることをこなせるようになるだろうと、11日前に予想していたとの言及。
  • pip の速度に関する個人的な経験

    • pip はたいてい高速に動作するが、大量のデータをダウンロードしたりネイティブライブラリをコンパイルしたりする必要があると遅くなるという経験。一方で conda は非常に遅く、強力なマシンでも遅い。
  • 新しい Python パッケージマネージャーに対する懐疑的な見方

    • また新たな Python パッケージマネージャーが登場したが、もし pip を置き換えられるものなら、速度向上のために ruff へ移行したときのように移行できるだろう。Python パッケージ管理には恒久的な解決策が必要だという意見。
  • uv がプラットフォーム固有の requirements.txt ファイルを生成する決定への疑問

    • uv がプラットフォーム非依存の poetry.lock や pdm.lock を生成するのではなく、プラットフォーム固有の requirements.txt ファイルを生成する判断の理由が気になるという声。
  • Astral チームの取り組みへの祝意と好意的な反応

    • Astral チームが Python パッケージングを「修正」しようとする外部からの試みに懸念を示していたものの、互換性が優先されているのを見てうれしく思うという反応。既存ツールや標準との互換性を重視するために Astral チームが努力している点を好意的に評価している。
  • pip パッケージのコンパイル問題に関する質問

    • 一部の pip パッケージは gcc、g++、gtk、Qt などの一式のツールチェーンに依存したコンパイルを必要とするが、これをどうすればよりエラーが起きにくく、ユーザーフレンドリーにできると考えているのか、という質問。