Pythonの卵とは何ですか?


532

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

回答:


527

注:卵のパッケージは、ホイールのパッケージに置き換えられました。

.jarJavaのファイルと同じ概念で、コードをバンドルとして配布するための、.zip一部のメタデータファイルの名前が変更されたファイルです.egg

具体的には:Pythonの卵の内部構造

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

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


82

この.eggファイルは、Pythonパッケージの配布形式です。これは、ソースコードの配布またはWindowsの単なる代替手段exeです。ただし、pureの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

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

ソース:Pythonライブラリブログ


3

Python eggは、追加情報をPythonプロジェクトにバンドルする方法です。これにより、実行時にプロジェクトの依存関係をチェックして満たすことができ、プロジェクトが他のプロジェクトのプラグインを提供できるようになります。卵を具体化するバイナリ形式はいくつかありますが、最も一般的なのは「.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。、twisted。、peak。*パッケージは、常に同じ場所に配置する必要がある通常のパッケージとは異なり、別々の卵として配布できます。親ディレクトリ。これにより、巨大なモノリシックパッケージを個別のコンポーネントとして配布できます。

  • これにより、アプリケーションまたはライブラリーが必要なライブラリーのバージョンを指定できるため、例えば、twisted.internetのインポートを実行する前にrequire( "Twisted-Internet> = 2.0")できます。

  • 拡張機能やプラグインを拡張可能なアプリケーションやフレームワーク(0.9b1以降のプラグインにeggを使用するTracなど)に配布するための優れたフォーマットです。eggランタイムは、eggを見つけてアドバタイズされたエントリポイントを見つけるためのシンプルなAPIを提供するためです(同様) Eclipseの「拡張ポイント」の概念)。

Javaの「jar」形式の利点と同様に、標準化された形式を使用することで得られる他の利点もあります。


Python eggはバージョン固有ですか?つまり、卵は2対3で作られましたか?それともマイナーバージョン?ex 2.x
ealeon

1

「卵」は、Python関連のプロジェクト用の単一ファイルのインポート可能な配布形式です。

「Python Eggのクイックガイド」には、「JarはJavaと同じように、卵はPythonのものである...」と記載されています。

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


リンクは今日の時点で死んでいます。
Perfi

@Perfi Linkがうまくいきます。
Klik

時々それがどのように動くかおかしい!オンラインに戻りました。それを見てうれしい:)
Perfi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.