これらが含まれます:Pythonは、プロジェクトをパッケージ化して記述するために使用できるツールの混乱の歴史を持ちdistutils、標準ライブラリではdistribute、distutils2とsetuptools(そしておそらくそれ以上)。と思われdistribute、distutils2廃止されたため、setuptools2つの競合する標準が残っています。
私の理解でsetuptoolsは、よりもはるかに多くのオプション(依存関係の宣言、テストなど)が提供されていますdistutilsが、Python標準ライブラリには(まだ?)含まれていません。
Pythonのパッケージングユーザガイド [ 1 ]今お勧めします。
setuptoolsプロジェクトを定義し、ソース配布を作成するために使用します。
そして説明します:
pure
distutilsは多くのプロジェクトで使用できますが、他のプロジェクトへの依存関係の定義をサポートしておらず、によって提供されるパッケージメタデータを自動的に正しく入力するためのいくつかの便利なユーティリティがありませんsetuptools。標準ライブラリの外にあるsetuptoolsは、Pythonの異なるバージョン間でより一貫した機能セットも提供し、(とは異なりdistutils)setuptoolsサポートされているすべてのバージョンで次の「メタデータ2.0」標準形式を生成するように更新されます。を使用することを選択したプロジェクトであっても、
distutilspipがそのようなプロジェクトを(事前に作成されたwheelファイルからインストールするのではなく)ソースから直接インストールする場合、setuptools代わりに使用してプロジェクトをビルドします。
ただし、さまざまなプロジェクトのsetup.pyファイルを調べると、これが実際の標準ではないように見えます。多くのパッケージがまだ使用されてdistutilsおり、サポートするパッケージは、たとえばフォールバックインポートを実行することによって、setuptoolsしばしば混合されます。setuptoolsdistutils
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
setuptoolsとの両方でインストールできるセットアップを作成する方法を見つける試みが続きますdistutils。distutilsにはセットアップ機能の依存関係がサポートされていないため、多くの場合、エラーが発生しやすい依存関係チェックのさまざまな方法が含まれます。
なぜ人々はまだサポートするために余分な努力をしdistutilsているのですか- setuptools標準ライブラリにないことが唯一の理由ですか?だけがサポートするsetup.pyファイルをdistutils書き込むことの利点と欠点は何ですか。setuptools
setuptoolsは拡張された代替手段ですが、distutils「スクリプト自体がインポートするだけの場合でも、推奨されるpipインストーラーはですべてのsetup.pyスクリプトを実行しますsetuptoolsdistutils」(ソース)
distutilsはに統合setuptoolsされましたが、使用するように作成されたレガシーアプリがありdistutils、正しい標準に移行するためにコストがかかります。