web-dev-qa-db-ja.com

setuptools、distribute、pipはどのように相互に関連していますか?

私は「Learn Python The Hard Way」(第2版)」という本を通してPythonを教えてきました。演習46では、読み進めるように言われました。 Pip、Distribute、およびその他のいくつかのパッケージ。

Pipのドキュメントは十分に明確でした。パッケージのインストール/アンインストール、アップグレードが可能です。配布用のドキュメントを読むと、基本的に同じことをしているようです。

簡単にダウンロード、ビルド、インストール、アップグレード、アンインストールPythonパッケージ

Pipとdistributeの違いは何ですか?また、それらは互いにどのように関連していますか?

47
bgcode

[2014-10 TL; DR:distributeは無効です。pip、新しいsetuptools、および、バイナリ分布の場合、wheels。詳細は以下をご覧ください。]


[元の回答]

分配します です は古い setuptools のフォークだったので、以下のほとんどすべてのコメントはDistributeとsetuptoolsに等しく適用されます。 Setuptoolsは、さらに古いPython標準ライブラリパッケージ Distutils のいくつかの穴を埋める試みでした。 Setuptoolsは、コマンドラインインターフェイスを介したパッケージの自動ダウンロード、easy_install、およびある程度の依存関係管理などの機能を追加しました。ただし、Pythonコミュニティの一部は、setuptoolsがあまりにも煩わしく、一部の機能には舞台裏の魔法が多すぎるという意見です。

pipは、setuptoolsまたはDistributeの上にある高レベルのインターフェースです。それらを使用してその機能の多くを実行しますが、zip形式の卵などのより物議を醸す機能のいくつかを回避します。 pipは、アンインストールコマンドや、要件の固定セットを定義し、パッケージのセットを確実に再現する機能など、setuptoolsでは利用できない機能も提供します。より完全な機能比較があります ここ

なぜこれほど多くのコンポーネントがあるのですか(そして buildout のようにもっとあります)?多くの理由:ソリューションは、Pythonがサポートされているすべての主要なプラットフォーム(つまり、Unix-y、Windows、Mac OS X)で機能する必要があるため、ビルドとインストールにはcomplex一連の問題;多くのオープンソースプロジェクトと同様に、Pythonは本質的にすべてボランティアであり、多くの開発者はパッケージ化とインストールの問題にそれほど関心がありません。標準ライブラリに主要な新しい証明されていない機能を追加することについては、自然な保守主義があります。意見の違い等.

現在、Distutilsの代わりに、そしておそらくいくつかの高レベルのアドオンに代わるものを提供するプロジェクトが進行中です。 Python 3.3標準ライブラリで packaging パッケージとして、またPythonの古いバージョンのアドオンとして Distutils2 としてリリースされる予定です。

要約すると、現在の関係は次のとおりです。

pip -> [ setuptools | Distribute ] -> Distutils -> Python core
                                    |
    3rd party packages              |      included in Python
                                    |

UPDATE(2012-07):Python 3.3の機能コードのカットオフの前に、packagingはまだリリースの準備ができていないと判断されました標準ライブラリにあるため、3.3リリースから削除されました。作業は、PyPIを介して利用できるDistutils2と、Python 3.4の標準ライブラリに含まれるもので続行されます。


UPDATE(2014-10):この回答が最後に更新されてから、Pythonパッケージングの世界でさらに変更が加えられました。

  • 最も重要なことは、2013年半ば以降、setuptoolsdistributeの間の亀裂が解消され、開発活動 が新しいsetuptoolsプロジェクトに統合されたことですdistributeは非推奨になり、保守されなくなりました。代わりに新しいsetuptoolsを使用しますが、そのeasy_installをインストーラーとして使用しないでください。

  • pipは、仮想環境の内外( virtualenv または pyvenv )のいずれかで、事実上の祝福されたインストーラーツール(プラットフォームのパッケージマネージャーによって提供されないPythonパッケージ用)になりました。

  • 古いsetuptoolsbdist eggsの代わりに、 wheels がPythonパッケージの祝福されたバイナリ配布形式になりました。

  • Python 3.4pip のバージョンwheelがサポートされ、公式のpython.orgバイナリインストーラーとソースパッケージが同梱され、pipも含まれる予定です。 Python 2.7の次のメンテナンスリリース (2.7.9)。

  • Distutils2packagingは休止状態になりました。

詳細については、Python 3ドキュメントの新しい Pythonモジュールの配布 セクションおよび新しい Pythonパッケージングユーザーガイド を参照してください。

76
Ned Deily