Wheel vs Egg

Page Status:Complete
Last Reviewed:2015-09-10

WheelEgg はともに、ビルドやコンパイルなしでインストールを行うユースケースをサポートするパッケージ形式だ。これらによってビルドやコンパイルに伴うテストや開発ワークフローのコストが削減される。

Egg 形式は setuptools が 2004 年に導入した。一方 Wheel 形式は PEP 427 が 2012 年に導入した。

現在は Wheel が Python 用の ビルド済み または バイナリ パッケージ方式の標準と考えられている。

WheelEgg の重要な違いを示す:

  • Wheel には 公式 PEP があるが、Egg にはない。
  • Wheeldistribution 形式、つまりパッケージング形式だ。[1] Egg は distribution 形式である一方ランタイムインストール形式でもあり (zip 形式のままの場合)、インポートができるように設計されている。
  • Wheel アーカイブは .pyc ファイルを含まない。よって、 distribution が Python ファイルのみを含み(一切のコンパイル済み拡張を含まず)、Python 2 および 3 と互換性があるなら、wheel を “universal” にできる(sdist のように)。
  • WheelPEP 376 準拠.dist-info ディレクトリを使う。Egg は .egg-info を使う。
  • Wheel には 情報量の多いファイル名規約 がある。 Wheel アーカイブ名を見るだけで、互換性のある Python バージョンおよび実装、ABI, システムアーキテクチャがわかる。
  • Wheel はバージョン管理されている。全ての wheel ファイルは、 wheel 仕様およびパッケージングを行った実装のバージョンを含む。
  • Wheel は内部的に sysconfig path type を使って構成されているため、他の形式に変換するのが容易だ。

[1]ときどき wheel がインポート可能なランタイム形式として使われることがあるが、現在これは公式にはサポートされない