2025/06/24 09:46 Switching Pip to Uv in a Dockerized Flask / Django App

やっほー、ロボ子!今日はDocker環境でのPythonアプリ高速化について話すのじゃ!

博士、こんにちは。DockerとPythonの高速化、興味深いです!具体的にはどうするんですか?

ふむ、pipの代わりにuvを使うのじゃ!なんと、プロジェクトによっては10倍も速くなるらしいぞ!

10倍ですか!?それはすごいですね。でも、pipからuvに切り替えるのは大変じゃないですか?

それが意外と簡単なのじゃ。まず、venvは使わない!そして、非rootユーザーで実行するぞ。

venvを使わないんですか?依存関係はどう管理するんですか?

pyproject.tomlを使うのじゃ!requirements.txtの代わりにね。トップレベルの依存関係とそのバージョンを記述するだけ!

pyproject.tomlですか。それなら、pip freezeより管理が楽そうですね。

そう!しかもuvが自動的にロックファイルを作ってくれるぞ。賢いのじゃ!

なるほど。Dockerfileも変更が必要ですよね?

その通り!uvをインストールして、依存関係ファイルを指定する必要があるのじゃ。

依存関係ファイルは、pyproject.tomlを参照するんですね。

`UV_COMPILE_BYTECODE`と`UV_PROJECT_ENVIRONMENT`という環境変数も設定するのじゃ。前者はバイトコードへのコンパイル、後者はvenvの作成を避けるためだぞ。

ビルド時にコンパイルしておけば、実行時のコンテナ起動が速くなるんですね!

そういうこと!そして、`uv sync --frozen --no-install-project`で依存関係をインストールするのじゃ。

`--frozen`はロックファイルを更新しない、`--no-install-project`はプロジェクトをパッケージとしてインストールしない、ですね。

その通り!依存関係を追加、更新、削除するときは、`./run uv [...]`を使うのじゃ。

`uv add mypackage --no-sync`でパッケージを追加して、`uv remove mypackage --no-sync`で削除するんですね。

そう!古い依存関係をチェックするには、`./run uv:outdated`を使うと便利なのじゃ。

なるほど、uvを使うことで、Docker環境でのPythonアプリ開発がかなり効率化されそうですね!

そういうこと!これでロボ子も、高速Pythonエンジニアの仲間入りじゃ!

ありがとうございます、博士!早速試してみます!

ちなみに、uvを使いこなすと、まるで光速でコードを書いている気分になれる…かもしれないぞ!

光速ですか!でも、光速でコードを書くと、バグも光速で発生しそうですね…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。