萌えハッカーニュースリーダー

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

光速ですか!でも、光速でコードを書くと、バグも光速で発生しそうですね…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search