55

私は本「Learn Python The Hard Way」(第 2 版) を通じて Python を独学しています。演習 46 では、Pip、Distribute、およびその他のいくつかのパッケージについて読むように指示されました。

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

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

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

4

1 に答える 1

84

[ 2014-10 TL; DR: distributeデッド、使用pip、新しいsetuptools、および、バイナリ配布の場合、wheels。詳細は以下をご覧ください。]


【元の回答】

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

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

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

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

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

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

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


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

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

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

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

  • Python 3.4以降、サポート付きのバージョンがpip公式のバイナリインストーラーとソースパッケージとともに出荷され、Python 2.7の次のメンテナンスリリース(2.7.9)にも含まれる予定です。wheelpython.orgpip

  • Distutils2そしてpackaging今は休眠中です。

詳細については、Python3ドキュメントの新しいDistributingPython Modulesセクションと、新しいPythonPackagingユーザーガイドをご覧ください。

于 2011-12-18T08:04:28.257 に答える