Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Advertisement

More Related Content

Advertisement

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

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

×