egg とはなんだったのか 栄光の setuptools
Python 2 EOL Party in Tokyo
Atsushi Odagiri
February 15, 2020
Outline
egg とはなんだったのか 栄光の setuptools
Agenda
setuptools
egg
自己紹介
aodag
Atsushi Odagiri
Open Collector, Inc.
覚えているでしょうか?
http://peak.telecommunity.com/
ez_setup.py
http:
//peak.telecommunity.com/DevCenter/setuptools
setup.py で直接使ったり
import ez_setup
ez_setup.use_setuptools()
from setuptools import setup
コマンド実行したり
$ sudo python ez_setup.py
setuptools の構成
setuptools の配布物に含まれるもの
setuptools パッケージ
pkg_resources パッケージ
easy_install コマンド
setuptools モジュール
distutils を拡張する
install や build などの既存コマンドの拡張
install コマンド実行時に依存ライブラリをインストールする
upload コマンドで cheeseshop にパッケージをアップロード
setup.py 書くのにちょっと便利な関数
find_packages とか
pkg_resources モジュール
パッケージ管理のユーティリティ
パッケージメタデータ (egg!) の処理
entry_point などの取得
パッケージ以下のファイルリソースの取り扱い
これが pkg_resources の名前の由来だと思う
easy_install コマンド
パッケージインストーラー
cheeseshop からダウンロード
egg ディレクトリにインストール
依存ライブラリがあればそれもインストール
multi-versioning 可能
pip との関係
$ ez_setup.py
$ easy_install pip
$ pip install virtualenv
$ virutalenv .venv
$ .venv/bin/pip --version
distribute を覚えていますか?
setuptools がメンテされないのでフォークされた
0.6 ~ 0.6.49
0.7.x は setuptools との合流用
egg とはなんだったのか?
setuptools によって持ち込まれたパッケージング関連の様々
なツールや規約
http:
//peak.telecommunity.com/DevCenter/PythonEggs
egg の中身
egg info
egg フォーマット
egg ディレクトリ
名前空間パッケージ (pkg_resources.declare_namespace)
egg_info
metadata の拡張
entry_point.txt
dependencies.txt
egg フォーマットの作り方
$ python setup.py bdist_egg
egg フォーマットの中身
egg_info メタデータ
python パッケージ
egg フォーマットについて
ピュア python の配布物でも python バージョン固定
バイナリ拡張を含む場合は便利だったかもしれない
egg ディレクトリ
site-packages 以下に egg ごとのディレクトリを作る
easy_install.pth に egg ディレクトリを登録する
egg ディレクトリの効用
multi-version mode バージョン違いのパッケージを
site-packages にインストール可能
easy_install -m で easy_install.pth には egg を登録しない
状態
pkg_resources.requres で指定のバージョンの egg を
import 可能にする
名前空間パッケージ
__import__('pkg_resources').declare_namespace(__name__)
pip は egg を使わないの?
egg フォーマットの配布物をダウンロードすることはな
かった
sdist から egg_info を使って依存ライブラリを解決するため、
setuptools は必須だった
デフォルトでは site-packages ディレクトリ以下で egg ディレ
クトリ構成にしないようになっていた
pip が sdist をインストールするとき
setup.py install no-dep とかつけてるはず
setup.py bdist_egg egg を site-packages に展開
setup.py bdist_wheel wheel を site-packages に展開
pep517.build wheel を site-packages に展開
egg の後継 1
wheel フォーマット/PEP517
$ python -m pep517.build
metadata 2.1
markdown 使える
entry point は egg のままだよ!
egg の後継 1
PEP420 Implicit Namespace Packages
ごちゃごちゃやらずにただのディレクトリにすればよくね?
virtualenv/venv で egg ディレクトリいらないよね
プロジェクトごとに site-packages を切り替えるので
multi-verjoning いらない
pip は egg ディレクトリを使わずにフラットにインストール
する
setuptools はもう要らないのか?
C 拡張を扱える
名前空間パッケージを扱える
PEP517 に対応している
さよなら python2
setuptools はまだ元気です

eggとはなんだったのか 栄光のsetuptools