私は少し混乱しています。 Pythonパッケージ、ソースディストリビューション(setup.py sdist)とエッグディストリビューション(setup.py bdist_Egg)の2種類があるようです。
どちらも同じデータ、pythonソースファイルを含む単なるアーカイブのようです。1つの違いは、最も推奨されるパッケージマネージャーであるpip
がeggをインストールできないことです。
この2つの違いは何ですか?また、パッケージを配布する方法は何ですか?
(PyPIを介してパッケージを配布したくないのですが、PyPIから依存関係をフェッチするパッケージマネージャーを使用したいことに注意してください)
_setup.py sdist
_はソースディストリビューションを作成します:それはsetup.py、モジュール/スクリプトのソースファイル(.pyファイルまたは.c /バイナリモジュールの場合は.cpp)、データファイルなど。結果はアーカイブになり、これを使用して任意のプラットフォームですべてを再コンパイルできます。
_setup.py bdist
_(および_bdist_*
_)は、ビルドされたディストリビューションを作成します:.pycファイル、.so/.dll /.dylibが含まれますバイナリモジュールの場合、Windowsで_py2exe
_を使用している場合は.exe、データファイル...ただしsetup.pyは使用しません。その結果、プラットフォーム(たとえば、_linux-x86_64
_)とPythonのバージョンに固有のアーカイブが作成され、ファイルシステムのルートに抽出するだけでインストールできます(実行可能ファイルは/ usr/binにあります)。 (または同等のもの)、/ usr/share内のデータファイル、/ usr/lib/pythonX.X/site-packages/...内のモジュール)。パッケージマネージャーを使用して直接インストールできるrpmアーカイブを構築することもできます。
2つ以上の異なる種類のPython(配布)パッケージがあります。このコマンドは多くのサブコマンドを一覧表示します。
$ python setup.py --help-commands
さまざまなbdistタイプに注意してください。
Eggは新しいパッケージタイプで、setuptoolsによって導入されましたが、後で標準ライブラリによって採用されました。 sys.path
にモノリシックでインストールすることを目的としています。これは、sdistパッケージとは異なります。このパッケージは、setup.py install
を実行し、各ファイルを所定の場所にコピーし、おそらく他のアクションも実行することを目的としています(ビルド追加の任意のPythonコードがパッケージに含まれています)を実行する拡張モジュール。
卵はこの時点でほとんど時代遅れです。現在好まれているパッケージ形式は「ホイール」形式です。
Sdistを作成するか、Egg(またはwheel)を作成するかは、パッケージの依存関係を宣言できるかどうかとは関係ありません(インストール時にPyPIによって自動的にダウンロードされます)。この依存関係機能が機能するために必要なのは、distribute(setuptoolsの後継)またはdistutils2(distutilsの後継-現在の開発バージョンではpackagingとしても知られていますof Python 3.x)。
https://packaging.python.org/ は、パッケージングの詳細についての優れたリソースです。依存関係の宣言の詳細の一部をカバーしています(例: install_requires ですが、extras_require
afaictはカバーしていません)。