web-dev-qa-db-ja.com

'sdist'.tar.gzディストリビューションとpython egg)の違いは何ですか?

私は少し混乱しています。 Pythonパッケージ、ソースディストリビューション(setup.py sdist)とエッグディストリビューション(setup.py bdist_Egg)の2種類があるようです。

どちらも同じデータ、pythonソースファイルを含む単なるアーカイブのようです。1つの違いは、最も推奨されるパッケージマネージャーであるpipがeggをインストールできないことです。

この2つの違いは何ですか?また、パッケージを配布する方法は何ですか?

(PyPIを介してパッケージを配布したくないのですが、PyPIから依存関係をフェッチするパッケージマネージャーを使用したいことに注意してください)

36
Peter Smit

_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アーカイブを構築することもできます。

46
Schnouki

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はカバーしていません)。

15