【要約】venv・uv・poetry は何をどこに作るのか、中身を覗いて確かめる [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
Python開発者は、エディタやツールが意図しない環境を参照する問題に直面することがある。これらは開発体験を著しく損なう要因となる。
- ・VSCodeが正しいインタープリタを認識しない。
- ・ツールの仕様により、Pythonのバージョンが意図せず異なる。
- ・管理コマンドの挙動差により、手元とCI環境で差異が生じる。
// Approach
著者は、3つのツールで実際に環境を構築し、ファイルの中身を直接検証する手法を用いた。低レイヤーの挙動を明らかにすることを目的としている。
- ・
lsやcatを用い、生成物の構成とpyvenv.cfgを比較。 - ・
sys.prefixを出力させ、仮想環境の仕組みを実証。 - ・
uv syncとpoetry installの実行結果を比較し、同期挙動の差を特定。
// Result
仮想環境の正体が
pyvenv.cfg という単一のファイルであることを突き止めた。これにより、環境の不一致に関する多くの謎が解明された。- ・環境の不一致は、バイナリの場所と
pyvenv.cfgの関係で説明可能。 - ・
uv syncは宣言外のパッケージを削除し、環境を完全に同期する。 - ・
poetry installは余分なパッケージを残すため、環境が汚れやすい。
Senior Engineer Insight
> 環境の差異は、CI/CDにおける「手元では動くがサーバーで落ちる」問題の温床となる。特に
uv sync のような厳格な同期と、poetry install のような追加型の挙動差は、環境の冪等性を担保する上で致命的な差を生む。ツールの抽象化に依存せず、pyvenv.cfg という低レイヤーの仕組みを理解しておくことは、トラブルシューティングの速度を劇的に向上させる。