51

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

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

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

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

4

2 に答える 2

68

setup.py sdistソース配布を作成します。これには、setup.py、モジュール/スクリプトのソース ファイル (バイナリ モジュールの場合は .py ファイルまたは .c/.cpp)、データ ファイルなどが含まれます。結果は、後で使用できるアーカイブになります。任意のプラットフォームですべてを再コンパイルします。

setup.py bdist(およびbdist_*)ビルドされたディストリビューションを作成します。これには、.pyc ファイル、バイナリ モジュール用の .so/.dll/.dylib、py2exeWindows で使用する場合は .exe、データ ファイルが含まれますが、setup.py は含まれません。linux-x86_64その結果、プラットフォーム (例: ) および Python のバージョンに固有のアーカイブが作成され、ファイルシステムのルートに解凍するだけでインストールできます (実行可能ファイルは /usr/bin (または同等の場所にあります)、 /usr/share のデータ ファイル、/usr/lib/pythonX.X/site-packages/... のモジュール)。パッケージ マネージャーを使用して直接インストールできる rpm アーカイブを構築することもできます。

于 2011-06-09T12:35:16.030 に答える
20

2021 年の更新: Python には、卵を作成して使用するためのツールが存在しなくなりました。

2 つ以上の異なる種類の Python (ディストリビューション) パッケージがあります。このコマンドは、多くのサブコマンドを一覧表示します。

$ python setup.py --help-commands

さまざまな異なるbdistタイプに注意してください。

Egg新しいパッケージ タイプで、setuptools によって導入されましたが、後に標準ライブラリによって採用されました。にモノリシックにインストールすることを意図していますsys.pathこれは、実行することを意図したsdistパッケージとは異なり、setup.py install各ファイルを所定の場所にコピーし、おそらく他のアクション (拡張モジュールのビルド、パッケージに含まれる追加の任意の Python コードの実行) も行います。

この時点で、卵はほとんど時代遅れです。編集: 卵はなくなりました。Python から削除されたコマンド「easy_install」で使用されていました。

現在好まれているパッケージ形式は「ホイール」形式であり、特に「pip install」で使用されます。

sdist を作成するか、egg (または wheel) を作成するかは、パッケージの依存関係を宣言できるかどうかとは関係ありません (インストール時に PyPI によって自動的にダウンロードされます)。この依存関係機能が機能するために必要なのは、distribute (setuptools の後継) またはdistutils2 (distutils の後継 -現在の開発バージョンの Python 3 ではパッケージングとして知られている) によって提供される追加の API を使用して依存関係を宣言することだけです。バツ)。

https://packaging.python.org/は、パッケージ化に関する詳細情報を提供する優れたリソースです。依存関係の宣言の詳細の一部をカバーしています (例: install_requiresですが、extras_requireafaict ではありません)。

于 2011-06-09T12:22:47.480 に答える