質問: setuptoolsとdistutils:なぜdistutilsがまだ問題なのですか? pythonには、プロジェクトのパッケージ化と記述に使用できるツールの混乱した歴史があります。これらには、標準ライブラリのdistutils、distribute、distutils2、およびsetuptools(およびもっと)。 distributeとdistutils2は、setuptoolsを支持して廃止されたようです。これにより、2つの競合する標準が残ります。私の理解では、setuptoolsはdistutilsよりもはるかに多くのオプション(たとえば、依存関係、テストなどの宣言)を提供しますが、python標準ライブラリには含まれていません(まだ?)。pythonパッケージングユーザーガイド[ 1 ]が推奨するもの: setuptoolsを使用して、プロジェクトを定義し、ソース配布を作成します。 そして説明します: 多くのプロジェクトでpure distutilsを使用できますが、他のプロジェクトへの依存関係の定義をサポートせず、setuptoolsによって提供されるパッケージメタデータを自動的に正しく入力するためのいくつかの便利なユーティリティがありません。 setuptoolsは、標準ライブラリの外側にあるため、pythonの異なるバージョン間でより一貫した機能セットを提供し、(distutilsとは異なり)setuptoolsを更新して、すべてのバージョンで次の「metadata 2.0」標準フォーマットを生成しますサポートされているバージョン。 distutilsを使用することを選択したプロジェクトでも、pipがそのようなプロジェクトをソースから直接インストールする場合(ビルド済みのホイールファイルからインストールするのではなく)、実際にはsetuptoolsを使用してプロジェクトをビルドします。 ただし、さまざまなプロジェクトのsetup.pyファイルを調べると、これは実際の標準ではないようです。多くのパッケージはまだdistutilsを使用しており、setuptoolsをサポートするパッケージでは、setuptoolsとdistutilsが混在することがよくあります。フォールバックインポートを実行します。try: from setuptools import setup except importerror: from distutils.core import setup setuptoolsとdistutilsの両方でインストールできるセットアップを記述する方法を見つける試みが続きます。 distutilsはセットアップ関数の依存関係をサポートしていないため、これには多くの場合、エラーが発生しやすい依存関係チェックのさまざまな方法が含まれます。なぜ人々はまだdistutilsをサポートするために余分な努力をしているのですか-setuptoolsが標準ライブラリにないという事実が唯一の理由ですか? distutilsの利点は何ですか?setuptoolsのみをサポートするsetup.pyファイルを書くことには欠点があります。
回答: このsoの質問をご覧ください。それはすべてのパッケージング方法を非常によく説明しており、あなたの質問にある程度答えるのに役立つかもしれません: distribute、distutils、setuptools、distutils2の違い? distutilsは、pythonでのパッケージ化の標準ツールです。標準ライブラリ(python 2およびpython 3.0から3.3)に含まれています。単純なpythonディストリビューションには便利ですが、機能がありません。 setup.pyスクリプトにインポートできるdistutils pythonパッケージを紹介します。 setuptoolsは、distutilsの制限を克服するために開発されたもので、標準ライブラリには含まれていません。 easy_installと呼ばれるコマンドラインユーティリティを導入しました。また、setup.pyスクリプトにインポートできるsetuptools pythonパッケージと、ディストリビューションと共にインストールされたデータファイルを見つけるためにコードにインポートできるpkg_resources pythonパッケージも導入しました。 。その落とし穴の1つは、distutils pythonパッケージにモンキーパッチを適用することです。 pipでうまく機能するはずです。最新バージョンは2013年7月にリリースされました。 したがって、setuputilsはdistutilsよりも優先されるはずであり、質問の出所はわかりますが、distutilsはすぐにサポートを失うことはありません、簡単に言えば、人気のあるレガシープログラムで使用されることが多いためです。おそらくご存知のように、レガシープログラムでこれらの種類の変更を行うのは非常に苦痛であり、非互換性などのいくつかの問題が発生する可能性があり、開発者はソースコードを書き直す必要があります。そのため、distutilsは標準のpythonライブラリの一部であり、setuptoolsはそうではないという事実もあります。したがって、pythonプログラムを作成する場合は、この時代にsetuptoolsを使用してください。ただし、distutilsがなければ、setuptoolsは存在しなかったことに留意してください。