Wheel対Egg#

:term:`Wheel`と :term:`Egg`は、どちらも、試験目的の場合や本番環境の場合にはコストが高すぎるビルドやコンパイルをしなくてもプログラムをインストールするというユースケースに対応することを目指したパッケージングのフォーマットです。

:term:`Egg`のフォーマットは、2004年に:ref:`setuptools`によって、また、:term:`Wheel`のフォーマットは2012年に:pep:`427`によって導入されました。

:term:`Wheel`は、現在、Pythonにおける :term:`ビルド済配布物 <Built Distribution>`および :term:`バイナリ配布物 <Binary Distribution>`の標準であるとみなされています。

:term:`Wheel`と :term:`Egg`の重要な差異について以下にまとめます。

  • Wheel`には :doc:`公式の標準仕様 が存在します。 :term:`Egg`には対応するPEPがありません。

  • :term:`Wheel`は :term:`配布物 <Distribution Package>`のフォーマット、つまり、パッケージのフォーマットです。[1] :term:`Egg`は配布物のフォーマットでもあり、かつ、(もし圧縮されたままであれば)実行時のインストールフォーマットであってimportができるように設計されています。

  • :term:`Wheel`形式のファイルには.pycファイルが含まれていません。従って、配布物には(コンパイル済のファイル抜きの)Pythonファイルのみ(含み、Pythonのバージョン2と3で使用可能ですので、 :term:`sdist <Source Distribution (or "sdist")>`と同様にwheelは「汎用」であると言うことができます。

  • Wheel`は :pep:`PEP376-compliant <376>`に従って `.dist-info`` ディレクトリを用います。Eggは .egg-info を用います。

  • :term:`Wheel`には:pep:`richer file naming convention <425>`が存在します。単独のwheelアーカイブはPython言語のバージョンや実装、ABI、そしてシステムのアーキテクチャとの互換性を表示することができます。

  • :term:`Wheel`はバージョン付けされています。それぞれのwheelファイルは、それをパッケージしたwheelの仕様や実装のバージョンを保持しています。

  • :term:`Wheel`は内部では`sysconfigパスの型 <https://docs.python.org/2/library/sysconfig.html#installation-paths>`_で整理されているので、他のフォーマットに変換するのがより簡単になっています。

  • Egg によるアップロードは、 PEP 715 に従って PyPI へのアップロードとしては無効になっています。もっと情報が欲しい場合は、 非推奨のお知らせ <deprecation notice> を読んでください。