配布、distutils、setuptools、distutils2の違いは何ですか? 質問する

配布、distutils、setuptools、distutils2の違いは何ですか? 質問する

状況

オープンソースライブラリを Python 3 に移植しようとしています。(シンピもし誰かが疑問に思っているなら。

したがって、Python 3 用にビルドするときに を自動的に実行する必要があります。2to3そのためには、 を使用する必要がありますdistribute。したがって、現在のシステム (doctest によると ) を移植する必要がありますdistutils


問題

残念ながら、これらのモジュールの違いがよくわかりませんdistutilsdistribute、、setuptools。ドキュメントはせいぜい大ざっぱで、これらはすべてお互いのフォークのようで、ほとんどの状況で互換性があるように設計されています (ただし、実際にはすべてではありません)...などなど。


質問

誰か違いを説明してくれませんか?何を使えばいいのでしょうか?最も現代的なソリューションは何ですか?(余談ですが、 への移植に関するガイドもいただければ幸いですDistributeが、それは質問の範囲を少し超えています…)

ベストアンサー1

2022 年 5 月現在、この質問に対する他の回答のほとんどは数年前のものです。Python のパッケージ化の問題に関するアドバイスに出会ったときは、必ず公開日を確認し、古い情報は信頼しないでください。

Python パッケージング ユーザー ガイド読む価値があります。すべてのページに「最終更新日」が表示されているので、マニュアルの最新性を確認できます。また、非常に包括的です。Python Software Foundation の python.org のサブドメインでホストされているという事実は、その信頼性をさらに高めています。プロジェクト概要このページは特にここで関連しています。

ツールの概要:

Python のパッケージングの概要は次のとおりです。

サポートされているツール:

非推奨/廃止されたツール:

  • distutilsは Python の標準ライブラリにまだ含まれていますが、Python 3.10 以降では非推奨と見なされています。シンプルな Python ディストリビューションには便利ですが、機能が不足しています。スクリプトdistutilsにインポートできる Python パッケージを導入しますsetup.py

  • distributeは のフォークでしたsetuptools。同じ名前空間を共有していたため、Distribute がインストールされていた場合、 はimport setuptools実際には Distribute で配布されたパッケージをインポートしていました。Distributeは Setuptools 0.7 にマージされたため、Distribute を使用する必要はなくなりました。実際、Pypi のバージョンは Setuptools をインストールする互換性レイヤーにすぎません。

  • distutils2distutilsは、、、およびの最良の部分を取り入れてsetuptoolsdistributeを Python の標準ライブラリに含まれる標準ツールにしようという試みでした。アイデアとしては、distutils2古いバージョンの Python 用に が配布され、 Python 3.3 用にdistutils2が に名前変更されてpackaging標準ライブラリに含まれるというものでした。しかし、この計画は予定通りには進まず、現在、 はdistutils2放棄されたプロジェクト となっています。最新リリースは 2012 年 3 月で、その Pypi ホームページはついにその終了を反映して更新されました。

その他:

他にもツールがありますので、興味があれば読んでみてくださいプロジェクト概要Python Packaging User Guide で、 、 、についてdistributeのみ説明されています。このページを繰り返さず、質問と回答を一致させるために、すべてをリストすることはしません。distutilssetuptoolsdistutils2

おすすめ:

これらすべてが初めてで、どこから始めればよいかわからない場合は、と を一緒に学習することをお勧めしますsetuptools。これらはすべて一緒に使用すると非常にうまく機能します。pipvirtualenv

を検討している場合はvirtualenv、次の質問に興味があるかもしれません。venv、、、、、などpyvenvの違いは何ですか?pyenvvirtualenvvirtualenvwrapper(はい、わかっています。私もあなたと一緒にうめきます。)

おすすめ記事