SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Pythonとパッケージングと私
Report
Atsushi Odagiri
Follow
open collector
Sep. 8, 2017
•
0 likes
•
19,010 views
1
of
41
Pythonとパッケージングと私
Sep. 8, 2017
•
0 likes
•
19,010 views
Download Now
Download to read offline
Report
Technology
pyconjp 2017 発表資料
Atsushi Odagiri
Follow
open collector
Recommended
数理モデリングからはじめるPython数理最適化 PyData.Tokyo 2017/6/28 Retty Inc. Iwanaga Jiro
Jiro Iwanaga
7.1K views
•
36 slides
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
kiki utagawa
19.7K views
•
102 slides
Rustに触れて私のPythonはどう変わったか
ShunsukeNakamura17
2.9K views
•
18 slides
Marp Tutorial
Rui Watanabe
3K views
•
15 slides
DockerコンテナでGitを使う
Kazuhiro Suga
18.3K views
•
8 slides
Prophet入門【理論編】Facebookの時系列予測ツール
hoxo_m
44.3K views
•
24 slides
More Related Content
What's hot
TVM の紹介
Masahiro Masuda
5.4K views
•
68 slides
GoによるiOSアプリの開発
Takuya Ueda
16.2K views
•
43 slides
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
9.9K views
•
39 slides
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
103.8K views
•
52 slides
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
Preferred Networks
5.2K views
•
86 slides
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
1.7K views
•
23 slides
What's hot
(20)
TVM の紹介
Masahiro Masuda
•
5.4K views
GoによるiOSアプリの開発
Takuya Ueda
•
16.2K views
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
•
9.9K views
ChatGPT 人間のフィードバックから強化学習した対話AI
Shota Imai
•
103.8K views
不老におけるOptunaを利用した分散ハイパーパラメータ最適化 - 今村秀明(名古屋大学 Optuna講習会)
Preferred Networks
•
5.2K views
エキスパートPythonプログラミング改訂3版の読みどころ
Takayuki Shimizukawa
•
1.7K views
プログラミングコンテストでの動的計画法
Takuya Akiba
•
91.1K views
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
•
220.9K views
ChatGPTは思ったほど賢くない
Carnot Inc.
•
4.4K views
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Panda Yamaki
•
33.2K views
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
•
266.2K views
ブラックボックス最適化とその応用
gree_tech
•
5.8K views
目grep入門 +解説
murachue
•
88.6K views
NumPyが物足りない人へのCython入門
Shiqiao Du
•
36.7K views
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Preferred Networks
•
1.6K views
Parser combinatorってなんなのさ
cct-inc
•
4.2K views
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
•
6.5K views
About GStreamer 1.0 application development for beginners
Shota TAMURA
•
9.7K views
Python 学習教材 (~299ページ)
Jun MITANI
•
240.6K views
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
•
12.7K views
Viewers also liked
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
hirokiky
12.9K views
•
78 slides
Pycon jp2017 20170908_ota
博三 太田
10.7K views
•
37 slides
Introducing wsgi_lineprof / PyCon JP 2017 LT
Yusuke Miyazaki
1.2K views
•
17 slides
ドローンのフライトコントローラをPythonで制御してみた話
Lina Katayose
13.8K views
•
43 slides
OpenAPIを利用したPythonWebアプリケーション開発
Takuro Wada
9.4K views
•
47 slides
Pythonistaで始めるiOSプロトタイプ開発
Yusuke Muraoka
6.4K views
•
30 slides
Viewers also liked
(14)
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
hirokiky
•
12.9K views
Pycon jp2017 20170908_ota
博三 太田
•
10.7K views
Introducing wsgi_lineprof / PyCon JP 2017 LT
Yusuke Miyazaki
•
1.2K views
ドローンのフライトコントローラをPythonで制御してみた話
Lina Katayose
•
13.8K views
OpenAPIを利用したPythonWebアプリケーション開発
Takuro Wada
•
9.4K views
Pythonistaで始めるiOSプロトタイプ開発
Yusuke Muraoka
•
6.4K views
Pythonが動く仕組み(の概要)
Yoshiaki Shibutani
•
3.2K views
Djangoフレームワークのユーザーモデルと認証
Shinya Okano
•
57.5K views
PyCon JP 2017Yuta Kitagami
Yuta Kitagami
•
7.2K views
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
•
17.3K views
PyconJP2017 Kivyによるアプリケーション開発のすすめ
Jun Okazaki
•
10.3K views
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
•
37.9K views
Pycon2017
Yuta Kashino
•
8.2K views
Pythonと機械学習によるWebセキュリティの自動化
Isao Takaesu
•
19.1K views
Similar to Pythonとパッケージングと私
パッケージングの今
Atsushi Odagiri
22.6K views
•
31 slides
書こう! 使おう! 単体テスト
ryohji ikebe
196 views
•
32 slides
Products.PloneOrg
Takanori Suzuki
3.1K views
•
12 slides
PyPI入門2018
Yukino Ikegami
829 views
•
12 slides
書こう! 使おう! 単体テスト
ryohji ikebe
301 views
•
32 slides
勉強会 Cvml python基礎
真哉 杉野
667 views
•
41 slides
Similar to Pythonとパッケージングと私
(17)
パッケージングの今
Atsushi Odagiri
•
22.6K views
書こう! 使おう! 単体テスト
ryohji ikebe
•
196 views
Products.PloneOrg
Takanori Suzuki
•
3.1K views
PyPI入門2018
Yukino Ikegami
•
829 views
書こう! 使おう! 単体テスト
ryohji ikebe
•
301 views
勉強会 Cvml python基礎
真哉 杉野
•
667 views
Git pyfes201207-presen
Kouhei Maeda
•
1.5K views
Fabric
Joe_noh
•
737 views
Pylons ユーザのための Pyramid 移行ガイド
Nozomu Kaneko
•
3.8K views
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
•
1.1K views
qmake入門
hermit4 Ishida
•
12.4K views
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
•
12.7K views
Jubatus: Jubakitでもっと楽をしよう
Tetsuya Shioda
•
310 views
Jubakitの解説
JubatusOfficial
•
10.3K views
ひのきのぼうだけで全クリ目指す
AromaBlack
•
1.5K views
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
エピック・ゲームズ・ジャパン Epic Games Japan
•
7.1K views
今最もアツイdistribution Gentoo Linuxについて
Takuto Matsuu
•
11K views
More from Atsushi Odagiri
async/await の向こう側 PyCon Kyushu 2022
Atsushi Odagiri
262 views
•
51 slides
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
Atsushi Odagiri
4.4K views
•
32 slides
eggとはなんだったのか 栄光のsetuptools
Atsushi Odagiri
678 views
•
27 slides
pyconjp 2019 LT 今日のsetuptools
Atsushi Odagiri
5.9K views
•
18 slides
Pythonでの開発を効率的に進めるためのツール設定
Atsushi Odagiri
46.6K views
•
54 slides
Python3 移行への軌跡
Atsushi Odagiri
3.3K views
•
13 slides
More from Atsushi Odagiri
(20)
async/await の向こう側 PyCon Kyushu 2022
Atsushi Odagiri
•
262 views
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
Atsushi Odagiri
•
4.4K views
eggとはなんだったのか 栄光のsetuptools
Atsushi Odagiri
•
678 views
pyconjp 2019 LT 今日のsetuptools
Atsushi Odagiri
•
5.9K views
Pythonでの開発を効率的に進めるためのツール設定
Atsushi Odagiri
•
46.6K views
Python3 移行への軌跡
Atsushi Odagiri
•
3.3K views
パッケージングを支える技術 pyconjp2016
Atsushi Odagiri
•
4.4K views
Sqlalchemy sqlの錬金術
Atsushi Odagiri
•
2.6K views
Clack meetup #1 lt
Atsushi Odagiri
•
1.1K views
Pyramid入門
Atsushi Odagiri
•
13.7K views
パッケージングの今と未来
Atsushi Odagiri
•
12.1K views
パッケージングの今と未来
Atsushi Odagiri
•
6.8K views
Bplt11 form alchemy
Atsushi Odagiri
•
10.7K views
Python3でwebアプリ
Atsushi Odagiri
•
5.7K views
Pyconjp2012 memory-of-europython
Atsushi Odagiri
•
973 views
What makes pyramid unique
Atsushi Odagiri
•
3.6K views
エキPy lt repoze.whoの紹介
Atsushi Odagiri
•
1.2K views
World plonedaylt
Atsushi Odagiri
•
1.2K views
Setup.pysetup.cfg
Atsushi Odagiri
•
1K views
BPStudy#54 そろそろPython3
Atsushi Odagiri
•
3.7K views
Recently uploaded
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
20 views
•
18 slides
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
164 views
•
16 slides
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
145 views
•
12 slides
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
115 views
•
31 slides
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
7 views
•
11 slides
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
5 views
•
1 slide
Recently uploaded
(14)
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
•
20 views
20230921_IoTLT_vol103_kitazaki_v1.pdf
Ayachika Kitazaki
•
164 views
遠隔お酌IoTLT2309.pptx
Yoshiaki Ito
•
145 views
IGDA Japan SIG Audio #20-1 室内・野外でのマイク収録と整音.pdf
IGDA Japan SIG-Audio
•
115 views
2023情報処理学会関西支部大会-G12.pdf
KoseiShimoda1
•
7 views
ヒアラブルデバイスにおける音漏れ信号を用いた空中ジェスチャ認識
sugiuralab
•
5 views
テスト自動化.pdf
ssuserf8ea02
•
29 views
CatBoost on GPU のひみつ
Takuji Tahara
•
548 views
MLOps Course Slides_JP(配布用).pdf
Yuya Yamamoto
•
118 views
GraphQLはどんな時に使うか
Yutaka Tachibana
•
14 views
CCoE実践者コミュニティ#1_CCoEが進めるセキュリティカイゼンの旅.pptx
Tomoaki Tada
•
57 views
画像生成AIの問題点
iPride Co., Ltd.
•
10 views
拡散する画像生成.pdf
NTTDOCOMO-ServiceInnovation
•
44 views
磁石内臓イヤリングによる磁力変化を利用したジェスチャ識別
sugiuralab
•
7 views
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 使わなくてもよい未来