Wheel vs Egg¶
Page Status: | Complete |
---|---|
Last Reviewed: | 2015-09-10 |
Wheel と Egg はともに、ビルドやコンパイルなしでインストールを行うユースケースをサポートするパッケージ形式だ。これらによってビルドやコンパイルに伴うテストや開発ワークフローのコストが削減される。
Egg 形式は setuptools が 2004 年に導入した。一方 Wheel 形式は PEP 427 が 2012 年に導入した。
現在は Wheel が Python 用の ビルド済み または バイナリ パッケージ方式の標準と考えられている。
- Wheel には 公式 PEP があるが、Egg にはない。
- Wheel は distribution 形式、つまりパッケージング形式だ。[1] Egg は distribution 形式である一方ランタイムインストール形式でもあり (zip 形式のままの場合)、インポートができるように設計されている。
- Wheel アーカイブは .pyc ファイルを含まない。よって、 distribution が Python ファイルのみを含み(一切のコンパイル済み拡張を含まず)、Python 2 および 3 と互換性があるなら、wheel を “universal” にできる(sdist のように)。
- Wheel は PEP 376 準拠 の
.dist-info
ディレクトリを使う。Egg は.egg-info
を使う。 - Wheel には 情報量の多いファイル名規約 がある。 Wheel アーカイブ名を見るだけで、互換性のある Python バージョンおよび実装、ABI, システムアーキテクチャがわかる。
- Wheel はバージョン管理されている。全ての wheel ファイルは、 wheel 仕様およびパッケージングを行った実装のバージョンを含む。
- Wheel は内部的に sysconfig path type を使って構成されているため、他の形式に変換するのが容易だ。
[1] | ときどき wheel がインポート可能なランタイム形式として使われることがあるが、現在これは公式にはサポートされない 。 |