今日の setuptools
pycon jp 2019 LT
Atsushi Odagiri
September 16, 2019
Outline
パッケージングにまつわるエトセトラ
PEP517,581
各種ツールの対応
まとめ
おまえだれよ
aodag: Atsushi Odagiri
株式会社オープンコレクター
pylonsproject.jp
今日の setuptools
2018.9.21 40.4.2
2017.9.15 36.5.0
2016.9.20 27.3.0
2015.9.19 18.3.2
2014.9.27 6.0
今日の setuptools
2019.8.21 41.2.0
2018.9.21 40.4.2
2017.9.15 36.5.0
2016.9.20 27.3.0
2015.9.19 18.3.2
2014.9.27 6.0
PEP517,518 の意義
setuptools と pip の組み合わせで実質成り立っていたフロー
の整理
他ツールとの整合性
これまでの sdist
setup.py を持ってるもの
pip が setup.py bdist_wheel を実行してできあがったも
のを site-packages に展開
PEP 517 – A build-system independent format for source
trees
インストーラ (pip など)sdist を wheel に変換するためのフ
ロー
pyproject.toml の build-system セクションの設定に基づ
いて wheel をビルド
build-system.requires のツールをインストール
build-system.backend の API を実行
ビルドした wheel を site-packages に展開
PEP 518 – Specifying Minimum Build System
Requirements for Python Projects
pyproject.toml の定義
tool セクション以下を自由に使える
pyproject.toml の例
[build-system]
requires = ["poetry >= 0.12, <1"]
build-backend = "poetry.masonry.api"
[tool.poetry]
name = "package_toml_poetry"
version = "0.1.0"
description = ""
authors = ["Name <email@email.com>"]
pip の対応
pip 19.0 以降で PEP517 準拠の sdist をインストール可能
pyproject.toml がなければ setuptools 由来のインストー
ル方法
pip
パッケージインストーラとしてほぼ唯一無二の存在
pipenv や poetry も裏では pip を実行する
setuptools の対応
pyproject.toml があれば setup.py なくてもよい
setuptools.build_meta がビルドバックエンド
フォールバック先なので書かなくてもこれになる
結果的に空の pyproject.toml を置くだけで setup.py 不要
になる
パッケージメタデータは setup.cfg に記述する
setuptools
なんだかんだで標準実装
名前空間パッケージや C 拡張モジュールなど setuptools じゃ
ないと対応していないものも多い
poetry の対応
poetry.masonry.api が build-backend
パッケージメタデータは pyproject.toml の tool.poetry
セクション以下に記述
poetry
期待の新星?
venv を管理したり pip をラップしていたり、単なるパッケー
ジャー以上の包括的な機能
tox の対応
isolated_build を設定すると PEP517 のフローでテスト環
境にインストール
skipsdist してる人たちには関係ない
[tox]
skipsdist = false
isolated_build = true
まとめ
各種ツールが PEP517,518 対応してきた
PEP517,518 が明確に定義され、新しいツールが進出するよ
うに
poetry, flit…
でも複雑なパッケージはやっぱ setuptools じゃないとだめ
名前空間パッケージ
C 拡張モジュール

pyconjp 2019 LT 今日のsetuptools