SlideShare a Scribd company logo
1 of 41
Download to read offline
Preface setup.cfg pyproject.toml conclusion
Pythonとパッケージングと私
Atsushi Odagiri
2017-09-08
Preface setup.cfg pyproject.toml conclusion
お前誰よ
• Atsushi Odagiri
• Open Collector, Inc.
• Repoze/Pylons/Pyramid
Preface setup.cfg pyproject.toml conclusion
パッケージングの基本
• pypi パッケージリポジトリ
• pip インストーラー
• setuptools/wheel パッケージャー
• virtualenv 仮想環境
Preface setup.cfg pyproject.toml conclusion
pypi
• pypi.python.org - 現在
• pypi.org - 次バージョン
• 徐々に pypi.org ドメインに機能移動
Preface setup.cfg pyproject.toml conclusion
pip
• sdist や wheel をリポジトリからダウンロードしてイン
ストールなど
• インストールされてるパッケージの状況を取得など
• pip 9.0.1
Preface setup.cfg pyproject.toml conclusion
setuptools/wheel
• setup.py から wheel を作る
• setuptools 36.4.0
• wheel 0.29.0
Preface setup.cfg pyproject.toml conclusion
virtualenv
• ライブラリのインストール先をプロジェクトごとに
分離
• virtualenv 15.1.0
• pip 9.0.1
• setuptools 28.0.0
Preface setup.cfg pyproject.toml conclusion
pipとvertualenvの使い方
$ virtualenv venv
$ . venv/bin/activate
(venv)$ pip install -U pip setuptools wheel
(venv)$ cat > requirements.txt
pyramid
ˆD
(venv)$ pip install -r requirements.txt
(venv)$ pip list –format=columns
Package Version
————– ——-
Pyramid 1.9
Preface setup.cfg pyproject.toml conclusion
wheelhouseにバンドル
(venv)$ pip freeze > constraints.txt
(venv)$ mkdir wheelhouse
(venv)$ pip wheel -r requirements.txt -c
constraints.txt -w wheelhouse -f wheelhouse
(venv)$ deactivate
$ virtualenv venv2
$ . venv2/bin/activate
(venv2)$ pip install -r requirements.txt -c
constraints.txt –no-index -f wheelhouse
Preface setup.cfg pyproject.toml conclusion
パッケージを作るには?
• setuptools を使う
• setup.py を書く
• setup.py で bdist_wheel コマンドを実行する
• setup.py upload か twine で pypi にアップロードする
(事前にアカウント作成必要)
Preface setup.cfg pyproject.toml conclusion
setup.py
from setuptools import setup, find_packages
import sample
setup(
name="sample-package",
version=sample.version,
author="Atsushi Odagiri",
author_email="aodagx@gmail.com",
description="sample package to use setup.py",
long_description="""
""",
url="https://aodag.jp/sample-package",
license="MIT",
packages=find_packages(),
)
Preface setup.cfg pyproject.toml conclusion
setup.pyのだめなとこ
• 設定と実行コードが混在
• long_description を外部ファイルに書くことが多い
• ファイル指定などは提供されてない
• みんなそれぞれ setup.py の中でファイルを読み込む処
理を書いてる
• パッケージのメタデータとして扱われる項目と
setuptools が利用する項目が分かれてない
Preface setup.cfg pyproject.toml conclusion
setup.cfg にパッケージメタデータを書こう
• setuptools 30.3.0 から setup.cfg にメタデータを書ける
ようになった
• metadata セクションと options セクション に書く
• ほぼ setup 関数の引数のまま
Preface setup.cfg pyproject.toml conclusion
setup.cfg にメタデータを書いた場合の setup.py
from setuptools import setup
setup()
シンプル!
Preface setup.cfg pyproject.toml conclusion
metadataセクションの主な項目
• name
• version
• author
• author_email
• description
• long_description
• url
• lisence
• classifiers
Preface setup.cfg pyproject.toml conclusion
実際のsetup.cfg(metadataセクション)
[metadata]
name = sample-package
version = attr:sample.version
author = Atsushi Odagiri
author_email = aodagx@gmail.com
description = sample package to use setup.cfg
long_description = file:README.rst
url = https://aodag.jp/sample-package
license = MIT
Preface setup.cfg pyproject.toml conclusion
特殊な項目
• version
• 直接書いてもいいが attr: でオブジェクトの内容を利用
できる
• callable な場合は評価された結果がバージョンになる
• 実行されてしまうので import するだけで副作用が起き
るコードは要注意
• long_description
• 直接書いてもいいが file: で指定したファイルの内容を
利用できる
• 今のところ 1 ファイルしか指定できない
Preface setup.cfg pyproject.toml conclusion
optionsセクションの主な項目
• packages
• install_requires
• entry_points
Preface setup.cfg pyproject.toml conclusion
options.* なセクション
• options.extras_require
• options.packages.find
Preface setup.cfg pyproject.toml conclusion
実際のsetup.cfg(optionsセクション)
[options]
install_requires =
pyramid
sqlalchemy
jinja2
packages = find:
entry_points = file:entry_points.cfg
Preface setup.cfg pyproject.toml conclusion
実際のsetup.cfg(options.* セクション)
[options.extras_require]
testing =
pytest
mysql =
pymysql
postgres =
psycopg2
[options.packages.find]
exclude =
tests
examples
Preface setup.cfg pyproject.toml conclusion
options の特殊な項目
• packages
• 自分で全部羅列してもよい
• find_packages 相当のことをする場合、 find: とだけ指
定して options.packages でオプション指定する
• entry_points
• 別途 entry_points を記述したファイルを指定するか
options.entry_points セクションで指定する
Preface setup.cfg pyproject.toml conclusion
entry_pointsのファイル
[console_scripts]
hello = sample:hello
Preface setup.cfg pyproject.toml conclusion
options.entry_points での指定方法
[options.entry_points]
console_scripts =
hello=sample:hello
Preface setup.cfg pyproject.toml conclusion
pbrとの違い
• pbr は setuptools の拡張
• openstack プロジェクトがパッケージングのために作成
した
• setup.cfg にメタデータを記述する
• その他 git タグによるバージョニングなど
• setup.cfg の項目がちょっと違う
Preface setup.cfg pyproject.toml conclusion
バージョンをgitタグから自動で設定したい
setuptools_scm を使うと git タグからバージョンを生成で
きる
setup(
name="example",
setup_require=["setuptools_scm"],
use_scm_version=True,
)
Preface setup.cfg pyproject.toml conclusion
setup.cfgでsetuptools_scmを試してみる
version = attr:setuptools_scm.get_version
• callable を指定すると評価結果がバージョンになる
• 実行時に setuptools_scm が入ってないといけない
• setuptools_scm が必要だということは setup_requires
で指定できるが…
Preface setup.cfg pyproject.toml conclusion
setup.cfg の setup_requires
• setup.cfg に書いたのではもう遅い
• setup 関数に書くしかない?
setup(setup_requires=["setuptools_scm"])
Preface setup.cfg pyproject.toml conclusion
setuptoolsの機能追加や拡張など
• setuptools のバージョンが古いと setup.cfg の機能が使
えない
• ユーザーの setuptools のバージョンは不確定
• setup_requires のタイミングは微妙
• 結局 setuptools の実装に頼っている部分があまり明確に
なってない
Preface setup.cfg pyproject.toml conclusion
build-system
• setuptools 以外のビルドツールを指定できる
• setuptools を使う場合でも必要な拡張やバージョンを指
定できる
Preface setup.cfg pyproject.toml conclusion
PEP 518
• pyproject.toml でビルドツールを指定する
• 存在しなければ今までの setuptools によるビルド
Preface setup.cfg pyproject.toml conclusion
pyproject.toml の形式
ビルドツールに flit を使う場合の例
[build-system]
requires = ["flit"]
backend = "flit.buildapi"
Preface setup.cfg pyproject.toml conclusion
ビルドツールの実装について
• PEP516
• コマンドラインでの実装
• reject されました
• PEP517
• API での実装
• 議論中
Preface setup.cfg pyproject.toml conclusion
PEP517で定義されてるAPI
• build_wheel
• build_sdist
• optional get_requires_for_build_wheel
• optional prepare_metadata_for_build_wheel
• optional get_requires_for_build_sdist
Preface setup.cfg pyproject.toml conclusion
pipのPEP518,PEP517対応
• pyproject.tom の読み込み [PEP518] はマージされている
• setup_requires の問題は解決できそう
• 隔離された環境での wheel 生成
• まだツールは setuptools 固定 [PEP517 未対応]
Preface setup.cfg pyproject.toml conclusion
flit: setuptools以外のパッケージングツール
• flit は setuptools とは別のパッケージングツール
• filit.ini でメタデータを書く
• シンプル
Preface setup.cfg pyproject.toml conclusion
flit を使うには
$ pip install flit
$ flit init
$ flit wheel
Preface setup.cfg pyproject.toml conclusion
flit の PEP517対応
• toml-config ブランチ
• flit.buildapi
Preface setup.cfg pyproject.toml conclusion
flitを使うべきか?
• pip の対応ができてないと sdist としてインストールで
きない
• wheel だけで配布するというのなら今からでも可能
• setuptools 自体も setup.cfg への移行など進んでる
• 個人的にはオルタナティブなツールは歓迎だが、使う
かっていうと…
Preface setup.cfg pyproject.toml conclusion
話し足りないこと
• プライベートパッケージリポジトリ
• Windows での C 拡張
• pip へのコントリビュート
• conda2wheel
Preface setup.cfg pyproject.toml conclusion
まとめ
• setuptools ちょっとだけ進化
• sdist から wheel を作る流れが PEP で定義される
• setuptools 使わなくてもよい未来

More Related Content

What's hot

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめsleepy_yoshi
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
論文の図表レイアウト例
論文の図表レイアウト例論文の図表レイアウト例
論文の図表レイアウト例Sunao Hara
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Preferred Networks
 

What's hot (20)

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
論文の図表レイアウト例
論文の図表レイアウト例論文の図表レイアウト例
論文の図表レイアウト例
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 

Viewers also liked

プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017hirokiky
 
Pycon jp2017 20170908_ota
Pycon jp2017 20170908_otaPycon jp2017 20170908_ota
Pycon jp2017 20170908_ota博三 太田
 
Introducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LTIntroducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LTYusuke Miyazaki
 
ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話Lina Katayose
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発Takuro Wada
 
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Yusuke Muraoka
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Yoshiaki Shibutani
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Shinya Okano
 
PyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta KitagamiPyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta KitagamiYuta Kitagami
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめJun Okazaki
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 
Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化Isao Takaesu
 

Viewers also liked (14)

プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
 
Pycon jp2017 20170908_ota
Pycon jp2017 20170908_otaPycon jp2017 20170908_ota
Pycon jp2017 20170908_ota
 
Introducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LTIntroducing wsgi_lineprof / PyCon JP 2017 LT
Introducing wsgi_lineprof / PyCon JP 2017 LT
 
ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話ドローンのフライトコントローラをPythonで制御してみた話
ドローンのフライトコントローラをPythonで制御してみた話
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発
 
Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発Pythonistaで始めるiOSプロトタイプ開発
Pythonistaで始めるiOSプロトタイプ開発
 
Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)Pythonが動く仕組み(の概要)
Pythonが動く仕組み(の概要)
 
Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証Djangoフレームワークのユーザーモデルと認証
Djangoフレームワークのユーザーモデルと認証
 
PyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta KitagamiPyCon JP 2017Yuta Kitagami
PyCon JP 2017Yuta Kitagami
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめPyconJP2017 Kivyによるアプリケーション開発のすすめ
PyconJP2017 Kivyによるアプリケーション開発のすすめ
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
Pycon2017
Pycon2017Pycon2017
Pycon2017
 
Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化Pythonと機械学習によるWebセキュリティの自動化
Pythonと機械学習によるWebセキュリティの自動化
 

Similar to Pythonとパッケージングと私

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようAtsushi Odagiri
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今Atsushi Odagiri
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テストryohji ikebe
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テストryohji ikebe
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎真哉 杉野
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presenKouhei Maeda
 
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドPylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドNozomu Kaneko
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpYoshifumi Yamaguchi
 
Jubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしようJubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしようTetsuya Shioda
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すAromaBlack
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 

Similar to Pythonとパッケージングと私 (18)

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
Products.PloneOrg
Products.PloneOrgProducts.PloneOrg
Products.PloneOrg
 
PyPI入門2018
PyPI入門2018PyPI入門2018
PyPI入門2018
 
書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト書こう! 使おう! 単体テスト
書こう! 使おう! 単体テスト
 
勉強会 Cvml python基礎
勉強会 Cvml python基礎勉強会 Cvml python基礎
勉強会 Cvml python基礎
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presen
 
Fabric
FabricFabric
Fabric
 
Pylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイドPylons ユーザのための Pyramid 移行ガイド
Pylons ユーザのための Pyramid 移行ガイド
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
qmake入門
qmake入門qmake入門
qmake入門
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
 
Jubakitの解説
Jubakitの解説Jubakitの解説
Jubakitの解説
 
Jubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしようJubatus: Jubakitでもっと楽をしよう
Jubatus: Jubakitでもっと楽をしよう
 
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 

More from Atsushi Odagiri

async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022Atsushi Odagiri
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02Atsushi Odagiri
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolsAtsushi Odagiri
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolsAtsushi Odagiri
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡Atsushi Odagiri
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016Atsushi Odagiri
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonAtsushi Odagiri
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid uniqueAtsushi Odagiri
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介Atsushi Odagiri
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3Atsushi Odagiri
 

More from Atsushi Odagiri (20)

async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
 
Clack meetup #1 lt
Clack meetup #1 ltClack meetup #1 lt
Clack meetup #1 lt
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Bplt11 form alchemy
Bplt11 form alchemyBplt11 form alchemy
Bplt11 form alchemy
 
Python3でwebアプリ
Python3でwebアプリPython3でwebアプリ
Python3でwebアプリ
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
 
World plonedaylt
World plonedayltWorld plonedaylt
World plonedaylt
 
Setup.pysetup.cfg
Setup.pysetup.cfgSetup.pysetup.cfg
Setup.pysetup.cfg
 
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
 

Recently uploaded

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 

Recently uploaded (10)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 

Pythonとパッケージングと私

  • 1. Preface setup.cfg pyproject.toml conclusion Pythonとパッケージングと私 Atsushi Odagiri 2017-09-08
  • 2. Preface setup.cfg pyproject.toml conclusion お前誰よ • Atsushi Odagiri • Open Collector, Inc. • Repoze/Pylons/Pyramid
  • 3. Preface setup.cfg pyproject.toml conclusion パッケージングの基本 • pypi パッケージリポジトリ • pip インストーラー • setuptools/wheel パッケージャー • virtualenv 仮想環境
  • 4. Preface setup.cfg pyproject.toml conclusion pypi • pypi.python.org - 現在 • pypi.org - 次バージョン • 徐々に pypi.org ドメインに機能移動
  • 5. Preface setup.cfg pyproject.toml conclusion pip • sdist や wheel をリポジトリからダウンロードしてイン ストールなど • インストールされてるパッケージの状況を取得など • pip 9.0.1
  • 6. Preface setup.cfg pyproject.toml conclusion setuptools/wheel • setup.py から wheel を作る • setuptools 36.4.0 • wheel 0.29.0
  • 7. Preface setup.cfg pyproject.toml conclusion virtualenv • ライブラリのインストール先をプロジェクトごとに 分離 • virtualenv 15.1.0 • pip 9.0.1 • setuptools 28.0.0
  • 8. Preface setup.cfg pyproject.toml conclusion pipとvertualenvの使い方 $ virtualenv venv $ . venv/bin/activate (venv)$ pip install -U pip setuptools wheel (venv)$ cat > requirements.txt pyramid ˆD (venv)$ pip install -r requirements.txt (venv)$ pip list –format=columns Package Version ————– ——- Pyramid 1.9
  • 9. Preface setup.cfg pyproject.toml conclusion wheelhouseにバンドル (venv)$ pip freeze > constraints.txt (venv)$ mkdir wheelhouse (venv)$ pip wheel -r requirements.txt -c constraints.txt -w wheelhouse -f wheelhouse (venv)$ deactivate $ virtualenv venv2 $ . venv2/bin/activate (venv2)$ pip install -r requirements.txt -c constraints.txt –no-index -f wheelhouse
  • 10. Preface setup.cfg pyproject.toml conclusion パッケージを作るには? • setuptools を使う • setup.py を書く • setup.py で bdist_wheel コマンドを実行する • setup.py upload か twine で pypi にアップロードする (事前にアカウント作成必要)
  • 11. Preface setup.cfg pyproject.toml conclusion setup.py from setuptools import setup, find_packages import sample setup( name="sample-package", version=sample.version, author="Atsushi Odagiri", author_email="aodagx@gmail.com", description="sample package to use setup.py", long_description=""" """, url="https://aodag.jp/sample-package", license="MIT", packages=find_packages(), )
  • 12. Preface setup.cfg pyproject.toml conclusion setup.pyのだめなとこ • 設定と実行コードが混在 • long_description を外部ファイルに書くことが多い • ファイル指定などは提供されてない • みんなそれぞれ setup.py の中でファイルを読み込む処 理を書いてる • パッケージのメタデータとして扱われる項目と setuptools が利用する項目が分かれてない
  • 13. Preface setup.cfg pyproject.toml conclusion setup.cfg にパッケージメタデータを書こう • setuptools 30.3.0 から setup.cfg にメタデータを書ける ようになった • metadata セクションと options セクション に書く • ほぼ setup 関数の引数のまま
  • 14. Preface setup.cfg pyproject.toml conclusion setup.cfg にメタデータを書いた場合の setup.py from setuptools import setup setup() シンプル!
  • 15. Preface setup.cfg pyproject.toml conclusion metadataセクションの主な項目 • name • version • author • author_email • description • long_description • url • lisence • classifiers
  • 16. Preface setup.cfg pyproject.toml conclusion 実際のsetup.cfg(metadataセクション) [metadata] name = sample-package version = attr:sample.version author = Atsushi Odagiri author_email = aodagx@gmail.com description = sample package to use setup.cfg long_description = file:README.rst url = https://aodag.jp/sample-package license = MIT
  • 17. Preface setup.cfg pyproject.toml conclusion 特殊な項目 • version • 直接書いてもいいが attr: でオブジェクトの内容を利用 できる • callable な場合は評価された結果がバージョンになる • 実行されてしまうので import するだけで副作用が起き るコードは要注意 • long_description • 直接書いてもいいが file: で指定したファイルの内容を 利用できる • 今のところ 1 ファイルしか指定できない
  • 18. Preface setup.cfg pyproject.toml conclusion optionsセクションの主な項目 • packages • install_requires • entry_points
  • 19. Preface setup.cfg pyproject.toml conclusion options.* なセクション • options.extras_require • options.packages.find
  • 20. Preface setup.cfg pyproject.toml conclusion 実際のsetup.cfg(optionsセクション) [options] install_requires = pyramid sqlalchemy jinja2 packages = find: entry_points = file:entry_points.cfg
  • 21. Preface setup.cfg pyproject.toml conclusion 実際のsetup.cfg(options.* セクション) [options.extras_require] testing = pytest mysql = pymysql postgres = psycopg2 [options.packages.find] exclude = tests examples
  • 22. Preface setup.cfg pyproject.toml conclusion options の特殊な項目 • packages • 自分で全部羅列してもよい • find_packages 相当のことをする場合、 find: とだけ指 定して options.packages でオプション指定する • entry_points • 別途 entry_points を記述したファイルを指定するか options.entry_points セクションで指定する
  • 23. Preface setup.cfg pyproject.toml conclusion entry_pointsのファイル [console_scripts] hello = sample:hello
  • 24. Preface setup.cfg pyproject.toml conclusion options.entry_points での指定方法 [options.entry_points] console_scripts = hello=sample:hello
  • 25. Preface setup.cfg pyproject.toml conclusion pbrとの違い • pbr は setuptools の拡張 • openstack プロジェクトがパッケージングのために作成 した • setup.cfg にメタデータを記述する • その他 git タグによるバージョニングなど • setup.cfg の項目がちょっと違う
  • 26. Preface setup.cfg pyproject.toml conclusion バージョンをgitタグから自動で設定したい setuptools_scm を使うと git タグからバージョンを生成で きる setup( name="example", setup_require=["setuptools_scm"], use_scm_version=True, )
  • 27. Preface setup.cfg pyproject.toml conclusion setup.cfgでsetuptools_scmを試してみる version = attr:setuptools_scm.get_version • callable を指定すると評価結果がバージョンになる • 実行時に setuptools_scm が入ってないといけない • setuptools_scm が必要だということは setup_requires で指定できるが…
  • 28. Preface setup.cfg pyproject.toml conclusion setup.cfg の setup_requires • setup.cfg に書いたのではもう遅い • setup 関数に書くしかない? setup(setup_requires=["setuptools_scm"])
  • 29. Preface setup.cfg pyproject.toml conclusion setuptoolsの機能追加や拡張など • setuptools のバージョンが古いと setup.cfg の機能が使 えない • ユーザーの setuptools のバージョンは不確定 • setup_requires のタイミングは微妙 • 結局 setuptools の実装に頼っている部分があまり明確に なってない
  • 30. Preface setup.cfg pyproject.toml conclusion build-system • setuptools 以外のビルドツールを指定できる • setuptools を使う場合でも必要な拡張やバージョンを指 定できる
  • 31. Preface setup.cfg pyproject.toml conclusion PEP 518 • pyproject.toml でビルドツールを指定する • 存在しなければ今までの setuptools によるビルド
  • 32. Preface setup.cfg pyproject.toml conclusion pyproject.toml の形式 ビルドツールに flit を使う場合の例 [build-system] requires = ["flit"] backend = "flit.buildapi"
  • 33. Preface setup.cfg pyproject.toml conclusion ビルドツールの実装について • PEP516 • コマンドラインでの実装 • reject されました • PEP517 • API での実装 • 議論中
  • 34. Preface setup.cfg pyproject.toml conclusion PEP517で定義されてるAPI • build_wheel • build_sdist • optional get_requires_for_build_wheel • optional prepare_metadata_for_build_wheel • optional get_requires_for_build_sdist
  • 35. Preface setup.cfg pyproject.toml conclusion pipのPEP518,PEP517対応 • pyproject.tom の読み込み [PEP518] はマージされている • setup_requires の問題は解決できそう • 隔離された環境での wheel 生成 • まだツールは setuptools 固定 [PEP517 未対応]
  • 36. Preface setup.cfg pyproject.toml conclusion flit: setuptools以外のパッケージングツール • flit は setuptools とは別のパッケージングツール • filit.ini でメタデータを書く • シンプル
  • 37. Preface setup.cfg pyproject.toml conclusion flit を使うには $ pip install flit $ flit init $ flit wheel
  • 38. Preface setup.cfg pyproject.toml conclusion flit の PEP517対応 • toml-config ブランチ • flit.buildapi
  • 39. Preface setup.cfg pyproject.toml conclusion flitを使うべきか? • pip の対応ができてないと sdist としてインストールで きない • wheel だけで配布するというのなら今からでも可能 • setuptools 自体も setup.cfg への移行など進んでる • 個人的にはオルタナティブなツールは歓迎だが、使う かっていうと…
  • 40. Preface setup.cfg pyproject.toml conclusion 話し足りないこと • プライベートパッケージリポジトリ • Windows での C 拡張 • pip へのコントリビュート • conda2wheel
  • 41. Preface setup.cfg pyproject.toml conclusion まとめ • setuptools ちょっとだけ進化 • sdist から wheel を作る流れが PEP で定義される • setuptools 使わなくてもよい未来