状況
オープンソースライブラリを Python 3 に移植しようとしています。(シンピもし誰かが疑問に思っているなら。
したがって、Python 3 用にビルドするときに を自動的に実行する必要があります。2to3
そのためには、 を使用する必要がありますdistribute
。したがって、現在のシステム (doctest によると ) を移植する必要がありますdistutils
。
問題
残念ながら、これらのモジュールの違いがよくわかりませんdistutils
。distribute
、、setuptools
。ドキュメントはせいぜい大ざっぱで、これらはすべてお互いのフォークのようで、ほとんどの状況で互換性があるように設計されています (ただし、実際にはすべてではありません)...などなど。
質問
誰か違いを説明してくれませんか?何を使えばいいのでしょうか?最も現代的なソリューションは何ですか?(余談ですが、 への移植に関するガイドもいただければ幸いですDistribute
が、それは質問の範囲を少し超えています…)
ベストアンサー1
2022 年 5 月現在、この質問に対する他の回答のほとんどは数年前のものです。Python のパッケージ化の問題に関するアドバイスに出会ったときは、必ず公開日を確認し、古い情報は信頼しないでください。
のPython パッケージング ユーザー ガイド読む価値があります。すべてのページに「最終更新日」が表示されているので、マニュアルの最新性を確認できます。また、非常に包括的です。Python Software Foundation の python.org のサブドメインでホストされているという事実は、その信頼性をさらに高めています。プロジェクト概要このページは特にここで関連しています。
ツールの概要:
Python のパッケージングの概要は次のとおりです。
サポートされているツール:
setuptools
は Distutils の制限を克服するために開発されたもので、標準ライブラリには含まれていません。 というコマンドライン ユーティリティが導入されましたeasy_install
。また、スクリプトsetuptools
にインポートできる Python パッケージsetup.py
と、pkg_resources
ディストリビューションとともにインストールされたデータ ファイルを見つけるためにコードにインポートできる Python パッケージも導入されました。 の欠点の 1 つは、Python パッケージにモンキー パッチを当てていることですdistutils
。 では問題なく動作するはずですpip
。定期的にリリースされます。scikit-build
は、コンパイルされた Python 拡張機能をビルドするために内部的に CMake を使用する、改良されたビルド システム ジェネレーターです。scikit-build は distutils に基づいていないため、実際にはその制限はありません。ninja-build が存在する場合、scikit-build は他の方法よりも 3 倍以上高速に大規模なプロジェクトをコンパイルできます。 とうまく連携するはずですpip
。distlib
は、のような高レベルツールで使用される機能を提供するライブラリですpip
。packaging
は、次のような高レベルツールで使用される機能を提供するライブラリでもありますpip
。setuptools
非推奨/廃止されたツール:
distutils
は Python の標準ライブラリにまだ含まれていますが、Python 3.10 以降では非推奨と見なされています。シンプルな Python ディストリビューションには便利ですが、機能が不足しています。スクリプトdistutils
にインポートできる Python パッケージを導入しますsetup.py
。distribute
は のフォークでしたsetuptools
。同じ名前空間を共有していたため、Distribute がインストールされていた場合、 はimport setuptools
実際には Distribute で配布されたパッケージをインポートしていました。Distributeは Setuptools 0.7 にマージされたため、Distribute を使用する必要はなくなりました。実際、Pypi のバージョンは Setuptools をインストールする互換性レイヤーにすぎません。distutils2
distutils
は、、、およびの最良の部分を取り入れてsetuptools
、distribute
を Python の標準ライブラリに含まれる標準ツールにしようという試みでした。アイデアとしては、distutils2
古いバージョンの Python 用に が配布され、 Python 3.3 用にdistutils2
が に名前変更されてpackaging
標準ライブラリに含まれるというものでした。しかし、この計画は予定通りには進まず、現在、 はdistutils2
放棄されたプロジェクト となっています。最新リリースは 2012 年 3 月で、その Pypi ホームページはついにその終了を反映して更新されました。
その他:
他にもツールがありますので、興味があれば読んでみてくださいプロジェクト概要Python Packaging User Guide で、 、 、についてdistribute
のみ説明されています。このページを繰り返さず、質問と回答を一致させるために、すべてをリストすることはしません。distutils
setuptools
distutils2
おすすめ:
これらすべてが初めてで、どこから始めればよいかわからない場合は、と を一緒に学習することをお勧めしますsetuptools
。これらはすべて一緒に使用すると非常にうまく機能します。pip
virtualenv
を検討している場合はvirtualenv
、次の質問に興味があるかもしれません。venv
、、、、、などpyvenv
の違いは何ですか?pyenv
virtualenv
virtualenvwrapper
(はい、わかっています。私もあなたと一緒にうめきます。)