【要約】'No matching distribution found for setuptools' エラーの対処と解説 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、オンライン環境のパッケージ構成をオフライン環境へ再現しようとした際に、ビルドエラーに直面した。
- ・pip downloadで取得したパッケージにyattagのような.tar.gz (sdist) が混在していた。
- ・sdistのインストールにはsetuptools等のビルドツールが必要である。
- ・Python 3.12のvenvにはsetuptoolsが標準で含まれていない。
- ・オフライン環境では、不足するツールをPyPIから自動取得できない。
- ・結果として、ビルド依存関係の解決ができずインストールが失敗した。
// Approach
開発者は、オフライン環境でのビルドを不要にするため、オンライン環境でのパッケージ取得手法を変更した。
- ・pip downloadの代わりにpip wheelコマンドを採用した。
- ・pip wheel -r requirements.txt -w ./wheelhouse を実行した。
- ・yattag等のsdistを事前に.whl形式へビルドした。
- ・ビルド済みの.whlファイルのみをオフライン環境へ転送した。
- ・これにより、オフライン環境でのインストール工程を簡略化した。
// Result
開発者がpip wheelを導入した結果、オフライン環境でのパッケージインストールが正常に完了した。
- ・すべてのパッケージが.whl形式となり、ビルドプロセスが不要になった。
- ・オフライン環境にsetuptoolsを別途用意する手間が省けた。
- ・環境を汚染することなく、目的のパッケージ構成を正確に再現できた。
- ・オフライン環境の構築コストとエラーリスクが大幅に低減した。
Senior Engineer Insight
> 閉域網での開発において、オフライン環境でのビルドは避けるべきだ。
- ・ビルドツールの不足や、C拡張のコンパイル失敗が頻発する。
- ・対策Aのように、オンライン環境で「ビルド済みバイナリ」を完結させるべきだ。
- ・これにより、オフライン環境の構成を極限までシンプルに保てる。
- ・CI/CDパイプラインにおいても、この事前ビルド戦略は標準とすべきである。