web-dev-qa-db-ja.com

Pythonの卵とは何ですか?

私はPythonが初めてなので、そのパッケージがどのように機能するのかを理解しようとしています。おそらく「卵」はある種の包装メカニズムですが、それらがどのような役割を果たすかの簡単な概要と、それらがなぜ有用であるか、そしてそれらをどのように作成するかについての何らかの情報となるでしょうか。

468
Bialecki

注: 卵の包装はWheelの包装に置き換えられました。

Javaの.jarファイルと同じ概念で、コードをバンドルとして配布するための、いくつかのメタデータファイルを.Zipに変更した.Eggファイルです。

特に:Pythonの卵の内部構造

「Python Egg」は、コード、リソース、およびメタデータを含む、Pythonプロジェクトの特定のバージョンのリリースを具体化した論理構造です。 Python Eggを物理的にエンコードするために使用できるフォーマットは複数ありますが、他にも開発できます。しかし、Pythonのeggの重要な原則はそれらが発見可能かつインポート可能であるべきであるということです。つまり、Pythonアプリケーションは、システム上に存在する卵を簡単かつ効率的に見つけ出し、目的の卵の内容を確実にインポートできるようにする必要があります。

プロジェクトは基本的に単一のディレクトリまたはファイル内に自己完結しており、他のプロジェクトのコードやリソースと混在しないため、.Eggフォーマットは配布およびコードの簡単なアンインストールまたはアップグレードに最適です。個々のプログラムが使用したいバージョンを選択できるように、プロジェクトの複数のバージョンを同時にインストールすることも可能です。

478
user177800

.EggファイルはPythonパッケージの配布フォーマットです。これは、ソースコード配布またはWindowsのexeに代わるものです。しかし、純粋なPythonの場合、.Eggファイルは完全にクロスプラットフォームです。

.Eggファイル自体は、基本的に.Zipファイルです。拡張子を「Zip」に変更すると、アーカイブ内にフォルダがあることがわかります。

また、.Eggファイルがある場合は、easy_installを使用してそれをパッケージとしてインストールすることもできます。

例:ディレクトリ用の.Eggファイルを作成するには、mymathと言うと、それ自体にいくつかのpythonスクリプトが含まれる可能性があります。

# setup.py
from setuptools import setup, find_packages
setup(
    name = "mymath",
    version = "0.1",
    packages = find_packages()
    )

次に、端末から次のようにします。

 $ python setup.py bdist_Egg

これにより多くの出力が生成されますが、完了すると3つの新しいフォルダがあることがわかります。builddist 、およびmymath.Egg-info。私たちが気にする唯一のフォルダはあなたの.Eggファイル、mymath-0.1-py3.5.Eggがあなたのデフォルトのpython(インストール)バージョンで見つかるdistフォルダです。数(ここで私のもの:3.5)

出典: Pythonライブラリブログ

60
kmario23

Python eggは、追加情報をPythonプロジェクトにバンドルする方法です。これにより、プロジェクトが他のプロジェクトにプラグインを提供できるだけでなく、プロジェクトの依存関係を実行時にチェックして満たすことができます。 eggを具体化するバイナリフォーマットはいくつかありますが、最も一般的なのは '.Egg' zipfileフォーマットです。これはプロジェクトを配布するのに便利なものです。パッケージ固有のデータ、プロジェクト全体のメタデータ、C拡張機能、およびPythonコードを含むすべての形式がサポートされています。

Pythonのeggをインストールして使う最も簡単な方法は、 "Easy Install" Pythonパッケージマネージャを使うことです。これは、eggを見つけ、ダウンロードし、構築し、そしてインストールします。必要なのは、使用したいPythonプロジェクトの名前(およびオプションでバージョン)だけです。

Python eggはPython 2.3以上で使用でき、setuptoolsパッケージを使用して構築できます(ソースコードについてはPython Subversionサンドボックス、現在のインストール手順についてはEasyInstallページを参照してください)。

Pythonの卵の主な利点は次のとおりです。

  • それらは "Easy Install" Pythonパッケージマネージャのようなツールを可能にします

  • .EggファイルはPythonパッケージ用の "ゼロインストール"フォーマットです。ビルドやインストールのステップは必要ありません。それらをPYTHONPATHまたはsys.pathに置いて使用するだけです(C拡張機能またはデータファイルを使用する場合はランタイムのインストールが必要になる場合があります)。

  • それらは、それらが依存する他の卵のようなパッケージメタデータを含むことができます。

  • それらは "名前空間パッケージ"(他のパッケージだけを含むパッケージ)を別々のディストリビューション(例えばzope。、ツイスト、peak。*パッケージ)に分割することを可能にします。いつも同じ親ディレクトリの下に置かれなければならない通常のパッケージとは異なり、別々のeggとして配布することができます。

  • それらは、アプリケーションやライブラリがライブラリの必要なバージョンを指定することを可能にします。インポートtwisted.internetを実行する前にrequire( "Twisted-Internet> = 2.0")を実行してください。

  • Eggランタイムは卵を探し出してそれらの宣伝されたエントリーポイントを見つけるための簡単なAPIを提供するので、それらは拡張性のあるアプリケーションやフレームワーク(0.9b1の時点で卵を使用するTracのような)に拡張やプラグインを配布する素晴らしいフォーマットです。 Eclipseの「拡張ポイント」の概念に).

Javaの「jar」形式の利点と同様に、標準化された形式を使用することから生じる可能性がある他の利点もあります。

2
prosti

"Egg"は、Python関連プロジェクト用の単一ファイルのインポート可能配布フォーマットです。

「Pythonの卵のクイックガイド」 は、「JarsはJavaのように卵はPythonsのためのものである...」

卵は実際には瓶よりも豊富です。ライセンスの詳細、リリースの依存関係などの興味深いメタデータを保持しています。

1
Aerin