HOWTO · Python
Egg ファイルを Python にインストールする
このチュートリアルでは、.egg ファイルを Python にインストールする方法と、操作を行うために必要なツールについて説明します。
このページの内容
Python の .egg は、setuptools に関連する旧式の配布形式です。新しい形式は .whl(wheel)で、新規プロジェクトではこちらが適しています。既存の egg を扱う場合は、まず対応する Python のバージョンとプラットフォームを確認してください。拡張子だけでは互換性を判断できません。
setuptools を使って Python に .egg ファイルをインストールする
かつて setuptools は、egg のインストールに使う easy_install コマンドを提供していました。以下の Windows 向け手順は Python 2.7 時代の方法であり、現在の Python 環境全般に適用できる手順ではありません。対象のインタープリターで setuptools と easy_install がすでに利用でき、egg が互換性のある Python バージョンとプラットフォーム向けに作られているレガシー環境に限って使用してください。
そのような環境では、コマンドは easy_install path\to\package.egg の形式です。対象インタープリターの Scripts ディレクトリが PATH に含まれるコマンドプロンプトで実行するか、対応する easy_install.exe をフルパスで指定します。PYTHON_PATH のような設定では、Windows が実行ファイルを検索できるようにはなりません。実行ファイルの検索に使われる環境変数は PATH です。古いブートストラップ用ダウンロードを、現在のインストール手順として使わないでください。
ファイル名 delftscope-0.1-py3.10.egg は、Python 3.10 向けにビルドされたことを示唆しています。ただし、この名前だけでは Python 2.7 でインストールできるとは判断できず、この例の互換性を裏付ける情報もありません。説明用の例としてのみ扱い、互換性を示す根拠がない限り、Python 2.7 の手順と組み合わせたり、インストールの成功を約束したりしないでください。コマンドの想定出力も、根拠がある場合に限って掲載し、根拠がなければ省略してください。対象のインタープリターやプラットフォーム、コマンドの動作を確認できない場合は、確認済みの環境に手順を限定するか、歴史的な方法であり未検証だと明記してください。
新しいプロジェクトでは、easy_install に頼らず、プロジェクトでサポートされている pip の手順を使って互換性のある wheel をインストールしてください。
.egg ファイルを展開して内容を確認・インストールする
ZIP 形式の .egg は ZIP アーカイブなので、アーカイブ用ツールで内容を一覧表示したり展開したりできます。unzip が使えるシステムでは、unzip -l package.egg でアーカイブの内容を一覧表示できますが、ファイルは展開されません。別のディレクトリに展開するには、unzip package.egg -d extracted-package を実行します。egg の中には、ZIP ファイルではなく、すでに展開済みのディレクトリになっているものもあります。ディレクトリには unzip を使えないため、ファイルを直接確認してください。
次の Python の例では、小さな ZIP 形式の .egg を作成し、その中のメンバー名を表示します。標準ライブラリを使ったアーカイブの確認方法を示す例です。
from pathlib import Path
from tempfile import TemporaryDirectory
from zipfile import ZIP_DEFLATED, ZipFile
with TemporaryDirectory() as temp_dir:
egg_path = Path(temp_dir) / "sample_package-1.0-py3-none-any.egg"
with ZipFile(egg_path, "w", ZIP_DEFLATED) as egg:
egg.writestr("sample_package/__init__.py", "VERSION = '1.0'\n")
egg.writestr("EGG-INFO/PKG-INFO", "Metadata-Version: 1.2\nName: sample-package\nVersion: 1.0\n")
with ZipFile(egg_path) as egg:
for name in egg.namelist():
print(name)
sample_package/__init__.py
EGG-INFO/PKG-INFO
この最小限のアーカイブは ZIP の内容を確認する例であり、パッケージを完全にインストールするものではありません。既存の egg を展開する場合は、まずファイルを確認してください。setup.py が存在し、パッケージの説明でこのレガシーな手順が指定され、選択した Python 環境に互換性がある場合に限り、setup.py があるディレクトリから python setup.py install を実行します。このコマンドはパッケージが提供するセットアップコードを実行するため、信頼できるパッケージに対してのみ使用してください。setup.py がなければ、展開しただけではパッケージはインストールされません。代わりに、パッケージの説明に記載された手順に従ってください。