web-dev-qa-db-ja.com

Pythonパッケージング:ホイールvs tarball(tar.gz)

卵に対するホイールの利点は明らかです(「なぜ卵を使わないのですか? https://pypi.python.org/pypi/wheel 」のセクションをご覧ください)。

ただし、tar.gzよりもホイールを使用する利点は何なのか、私には完全には明らかではありません。 「同じです」のような明らかなものがないかもしれません。私が見ているように、両方ともpipを使用して直接インストールでき(Windowsでも)、サイズが同じで、パッケージングの場合も同様の労力が必要です。パッケージングの方法論を正当化するときにあなたが得るかもしれない種類の質問のように私には聞こえます。

編集:tar.gzがホイールより優れている例を見つけました。 CherryPy( https://pypi.python.org/pypi/CherryPy )はPython 3.xのみ)のホイールを提供するため、ローカルリポジトリが必要な場合Python 2.7および3.xの依存関係に対してCherryPyを提供するには、tarballを保存する方が理にかなっているようです。これは正しいですか?(「ケースベース」の正当化をその話し合い)

35
zom-pro

これは私のためにそれを答えました(ホイールPEPから直接):

Pythonには、sdistよりもインストールが簡単なパッケージ形式が必要です。 Pythonのsdistパッケージは、distutilsおよびsetuptoolsビルドシステムによって定義され、それらを必要とします。新しい仮想環境にインストールできるように、任意のコードを実行してコードをビルドおよびインストールし、再コンパイルします。ビルドとインストールを統合するこのシステムは、遅く、維持が難しく、ビルドシステムとインストーラーの両方の革新を妨げます。

Wheelは、ビルドシステムとインストーラーの間にシンプルなインターフェイスを提供することで、これらの問題を解決しようとします。 wheelバイナリパッケージ形式により、インストーラーはビルドシステムについて知る必要がなくなり、多くのインストールでコンパイル時間を償却して時間を節約し、ターゲット環境にビルドシステムをインストールする必要がなくなります。

https://www.python.org/dev/peps/pep-0427/#rationale

私たちが話しているtarballは、上記の「sdists」と呼ばれるものであることに注意してください。

18
brk3

から Python Wheels

ホイールの利点

•純粋なpythonおよびネイティブC拡張パッケージの高速インストール。
•インストールのための任意のコード実行を回避します。 (setup.pyを避けます)
•C拡張機能のインストールには、WindowsまたはOS Xでのコンパイラは必要ありません。
•テストおよび継続的な統合のために、より良いキャッシュを可能にします。
•インストールの一部として.pycファイルを作成し、使用されるpythonインタープリターに一致することを確認します。
•プラットフォームとマシン全体でより一貫したインストール。

ホイールが取り付けられていることを確認してください。

pip install wheel
6
karel