【要約】Pythonのパッケージインストール激遅問題を解消してみた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発チームがPython 3.12環境において、デプロイワークフローの遅延に直面した。Docker Build時のパッケージインストールが極端に遅かった。パッケージマネージャーをuvへ変更しても改善は見られなかった。この問題は、開発効率を著しく低下させていた。
- ・デプロイ全体で約15分を要していた。
- ・uvへの移行後も、インストール速度は1分も改善しなかった。
- ・調査の結果、pandasのインストールにのみ、全体の約3分の2にあたる10分を費やしていた。
// Approach
開発者はインストールプロセスの詳細を調査した。パッケージの配布形式とPythonバージョンの関係性を分析した。パッケージマネージャーの速度ではなく、配布形式がボトルネックであると推論した。この推論に基づき、以下の手順で解決を図った。
- ・pandas 2.0.2がPython 3.12をサポートしていないことを特定した。
- ・bdist(wheel)が存在しないため、sdistからのビルドが強制されていた。
- ・sdistのビルドはbuild-backendの速度に依存することを理解した。
- ・pandasのバージョンをPython 3.12対応の2.1.1へ引き上げた。
// Result
パッケージのバージョン整合性を確保したことで、デプロイ時間が劇的に改善した。これにより、CI/CDの実行効率が向上し、開発サイクルが加速した。
- ・デプロイ全体の時間が15分から2分へと大幅に短縮された。
- ・uv等の高速なパッケージマネージャーの恩恵を、bdist利用下で享受できるようになった。
- ・Pythonのバージョンアップ時には、依存ライブラリの対応状況確認が不可欠であることを再認識した。
Senior Engineer Insight
> パッケージマネージャーの高速化は、bdistが利用可能な場合にのみ真価を発揮する。sdistによるビルドが発生すると、ボトルネックはbuild-backendへ移行する。CI/CDの遅延調査では、ツールの選定だけでなく、ランタイムとライブラリの互換性、および配布形式の整合性を確認すべきである。