Submit Search
Upload
パッケージングを支える技術 pyconjp2016
•
5 likes
•
4,402 views
Atsushi Odagiri
Follow
pycon jp 2016 発表資料
Read less
Read more
Software
Report
Share
Report
Share
1 of 58
Download now
Download to read offline
Recommended
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
Docstringを書こう!
Docstringを書こう!
cocodrips
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Preferred Networks
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
Kir Chou
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
Recommended
みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
Docstringを書こう!
Docstringを書こう!
cocodrips
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Machine Learning Night - Preferred Networksの顧客向けプロダクト開発 - 谷脇大輔
Preferred Networks
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
Kir Chou
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
Preferred Networks
Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
Scapyで作る・解析するパケット
Scapyで作る・解析するパケット
Takaaki Hoyo
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~
Yuya Unno
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
異常検知 - 何を探すかよく分かっていないものを見つける方法
異常検知 - 何を探すかよく分かっていないものを見つける方法
MapR Technologies Japan
Format string Attack
Format string Attack
icchy
【DL輪読会】Scaling laws for single-agent reinforcement learning
【DL輪読会】Scaling laws for single-agent reinforcement learning
Deep Learning JP
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
Toru Tamaki
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
Deep Learning JP
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
Hirokatsu Kataoka
大規模データに基づく自然言語処理
大規模データに基づく自然言語処理
JunSuzuki21
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
gree_tech
SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)
Takanori Ogata
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
Python3 移行への軌跡
Python3 移行への軌跡
Atsushi Odagiri
More Related Content
What's hot
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
MITSUNARI Shigeo
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~
Yuya Unno
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
MITSUNARI Shigeo
全力解説!Transformer
全力解説!Transformer
Arithmer Inc.
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
異常検知 - 何を探すかよく分かっていないものを見つける方法
異常検知 - 何を探すかよく分かっていないものを見つける方法
MapR Technologies Japan
Format string Attack
Format string Attack
icchy
【DL輪読会】Scaling laws for single-agent reinforcement learning
【DL輪読会】Scaling laws for single-agent reinforcement learning
Deep Learning JP
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
Toru Tamaki
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
Deep Learning JP
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
ken_kitahara
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
Hirokatsu Kataoka
大規模データに基づく自然言語処理
大規模データに基づく自然言語処理
JunSuzuki21
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
gree_tech
SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)
Takanori Ogata
What's hot
(20)
暗号文のままで計算しよう - 準同型暗号入門 -
暗号文のままで計算しよう - 準同型暗号入門 -
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
全力解説!Transformer
全力解説!Transformer
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
異常検知 - 何を探すかよく分かっていないものを見つける方法
異常検知 - 何を探すかよく分かっていないものを見つける方法
Format string Attack
Format string Attack
【DL輪読会】Scaling laws for single-agent reinforcement learning
【DL輪読会】Scaling laws for single-agent reinforcement learning
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
文献紹介:TSM: Temporal Shift Module for Efficient Video Understanding
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
PythonによるCVアルゴリズム実装
PythonによるCVアルゴリズム実装
大規模データに基づく自然言語処理
大規模データに基づく自然言語処理
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
SSD: Single Shot MultiBox Detector (ECCV2016)
SSD: Single Shot MultiBox Detector (ECCV2016)
Viewers also liked
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
Python3 移行への軌跡
Python3 移行への軌跡
Atsushi Odagiri
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
Akinori Kohno
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
kikuchan98
パッケージングの今
パッケージングの今
Atsushi Odagiri
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
Atsuo Ishimoto
Sqlalchemy sqlの錬金術
Sqlalchemy sqlの錬金術
Atsushi Odagiri
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術
a know
Import community pycon jp
Import community pycon jp
FATEC São José dos Campos
自分のチームをどう作る?
自分のチームをどう作る?
Masakatsu Sugii
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
Shinya Okano
PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 ja
drillan
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjp
Shinichi Nakagawa
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
x1 ichi
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
x1 ichi
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
Hironori Sekine
Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析
Hiroaki Sengoku
はてなブックマーク in Scala
はてなブックマーク in Scala
Lintaro Ina
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Lintaro Ina
Kubernetesを触ってみた
Kubernetesを触ってみた
Kazuto Kusama
Viewers also liked
(20)
パッケージングの今と未来
パッケージングの今と未来
Python3 移行への軌跡
Python3 移行への軌跡
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
パッケージングの今
パッケージングの今
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
Sqlalchemy sqlの錬金術
Sqlalchemy sqlの錬金術
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術
Import community pycon jp
Import community pycon jp
自分のチームをどう作る?
自分のチームをどう作る?
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 ja
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjp
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析
はてなブックマーク in Scala
はてなブックマーク in Scala
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
Kubernetesを触ってみた
Kubernetesを触ってみた
Similar to パッケージングを支える技術 pyconjp2016
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
Atsushi Odagiri
Products.PloneOrg
Products.PloneOrg
Takanori Suzuki
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
Satoshi Yazawa
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
Yoshifumi Yamaguchi
go-apt-cacher/mirror
go-apt-cacher/mirror
yutannihilation
210728 mpy
210728 mpy
Takuya Nishimoto
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版
VirtualTech Japan Inc./Begi.net Inc.
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
Firefoxの開発ツール
Firefoxの開発ツール
Noritada Shimizu
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
Kazuto Kusama
200527 ur
200527 ur
NoriakiAndo
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座
Kazuto Kusama
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
TokorosawaYoshio
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Junichi Noda
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
Osoljp201210 oi swift
Osoljp201210 oi swift
Noriyasu Sakaue
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
R S
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Yahoo!デベロッパーネットワーク
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェスト
Masao Takaku
Similar to パッケージングを支える技術 pyconjp2016
(20)
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
Products.PloneOrg
Products.PloneOrg
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
go-apt-cacher/mirror
go-apt-cacher/mirror
210728 mpy
210728 mpy
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
Firefoxの開発ツール
Firefoxの開発ツール
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
200527 ur
200527 ur
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみた
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Osoljp201210 oi swift
Osoljp201210 oi swift
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェスト
More from Atsushi Odagiri
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
Atsushi Odagiri
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
Atsushi Odagiri
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
Atsushi Odagiri
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
Atsushi Odagiri
Pythonとパッケージングと私
Pythonとパッケージングと私
Atsushi Odagiri
Clack meetup #1 lt
Clack meetup #1 lt
Atsushi Odagiri
Pyramid入門
Pyramid入門
Atsushi Odagiri
パッケージングの今と未来
パッケージングの今と未来
Atsushi Odagiri
Bplt11 form alchemy
Bplt11 form alchemy
Atsushi Odagiri
Python3でwebアプリ
Python3でwebアプリ
Atsushi Odagiri
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
Atsushi Odagiri
What makes pyramid unique
What makes pyramid unique
Atsushi Odagiri
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
Atsushi Odagiri
World plonedaylt
World plonedaylt
Atsushi Odagiri
Setup.pysetup.cfg
Setup.pysetup.cfg
Atsushi Odagiri
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Atsushi Odagiri
Form libraries
Form libraries
Atsushi Odagiri
フレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミング
Atsushi Odagiri
Form libraries
Form libraries
Atsushi Odagiri
Aodag scaffold
Aodag scaffold
Atsushi Odagiri
More from Atsushi Odagiri
(20)
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
Pythonとパッケージングと私
Pythonとパッケージングと私
Clack meetup #1 lt
Clack meetup #1 lt
Pyramid入門
Pyramid入門
パッケージングの今と未来
パッケージングの今と未来
Bplt11 form alchemy
Bplt11 form alchemy
Python3でwebアプリ
Python3でwebアプリ
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
What makes pyramid unique
What makes pyramid unique
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
World plonedaylt
World plonedaylt
Setup.pysetup.cfg
Setup.pysetup.cfg
BPStudy#54 そろそろPython3
BPStudy#54 そろそろPython3
Form libraries
Form libraries
フレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミング
Form libraries
Form libraries
Aodag scaffold
Aodag scaffold
パッケージングを支える技術 pyconjp2016
1.
2016年9月21日 パッケージングを支える技術 PyCon JP 2016 Atsushi
Odagiri
2.
1 お前だれよ • 小田切篤 •
Beproud, Inc.
3.
2 これまでのお話 • 2013
パッケージングの今と未来 • 2014 パッケージングの今 • 2015 Packaging最前線
4.
3 アジェンダ • パッケージングを支えるツール •
ソースパッケージ • バイナリパッケージ • パッケージングを支える技術に支えられてみ よう
5.
4 パッケージングを支える ツール • PyPA
ってなに?
6.
4.1 PyPA • Python
Packaging Authority • パッケージングツールをメンテするグループ • github.com/pypa • bitbucket.org/pypa
7.
4.2 PyPAの基本ツール • setuptools •
virtualenv • pip • wheel
8.
4.3 setuptools • 配布物を作成する •
setup.pyで使われる • easy_install使うのはもうやめましょう • distributeも、いい加減忘れてください • egg? あれは幻です
9.
4.4 今日のsetuptools • 27.2.0 •
去年(2016/9/6)18.3
10.
4.5 virtualenv • python環境を仮想化する •
プロジェクトごとに使うライブラリを隔離 • python3.3以降では同等の機能がpython本体か ら提供されている(pyvenv)
11.
4.6 pip • インストーラ •
sdistとwheelを取り扱える • requirements.txt でライブラリを構成管理する
12.
4.7 wheel • wheel形式パッケージを作成するツール •
setuptools に bdist_wheel サブコマンドを追 加する
13.
4.8 ツールの導入方法 • python3.4以降ではpip,setuptoolsを導入する ensurepipが入っているのでpythonインストー ル後にpipを利用可能 •
virtualenvは環境作成時にpip,setuptools,wheel を導入する • pyvenvはバージョンによって作成後のツール 導入が異なる – 3.3 なし – 3.4以降 ensurepipでpip,setuptoolsが導入さ れる
14.
• どの環境でもget-pip.py で pip,setuptools,wheelを最新にできる
15.
4.9 例えばubuntuのpyvenv • 14.04
の python3.4 は ensurepipが消されてい るため、–without-pipをつけないとエラーに なる • 16.04 の python3.5はensurepipが pkg_resources-0.0.0という謎のパッケージメ タデータを作成する – そのままpip freezeしたrequirements.txtを 作ると他の環境でエラーになる • 回避策は –without-pip で環境を作ってから get-pip.py でツールを導入する
16.
5 python標準の仕組み • pypaツールはどのようにパッケージをインス トールしてpythonインタプリタに認識させる のか?
17.
5.1 PYTHONPATHとsys.path • 環境変数PYTHON_PATHで複数のディレク トリを指定できる •
指定した内容は ‘sys.path‘ に入る • モジュールやパッケージを ‘import‘ するとき は ‘sys.path‘ のディレクトリを探しに行く • よくわからないところにインストールしても sys.path に追加できればよい
18.
5.2 site-packages/user-site-packages • サードパーティ製ライブラリの標準インストー ル先 •
debianではさらに dist-packages という謎の ディレクトリが存在する • user-site-packages はユーザー権限でインス トールできる • user-site-packages にインストールするには pipで ‘–user‘ オプションを使う
19.
5.3 .pth • site-packages
などに配置されるファイル • 中にファイルパスを羅列しておくと、インタプ リタ起動時にすべて ‘sys.path‘ に追加される • ‘./‘ 以外で始まる行があるとpythonコードとし て実行されるという謎仕様 • easy_install が活用していた
20.
5.4 distutils • setup.py
で使う setup 関数の大元 • setuptoolsはdistutilsの拡張 • 直接使うことはもうないはず • 昔はこれで setup.py install などとしていた
21.
6 バイナリディストリビュー ション wheel •
wheelもう使ってるよね?
22.
6.1 PEP 427
– The Wheel Binary Package Format 1.0 • バイナリ形式の配布フォーマット • 既に利用されている • C拡張を含まない場合はpy2.py3で共通の配 布物
23.
6.2 PEP 513
– A Platform Tag for Portable Linux Built Distributions • これまではLinux向けwheelはpypiにあげられ なかった • manylinux1 • linux向けのwheelを作るために決められた
24.
6.3 Linux向けwheelパッケージのつら いところ • どのようなライブラリがあると想定してよ いか? •
依存するライブラリのABIが合わないなどのト ラブル • 依存ライブラリ同梱のためのハックがsetup.py に散らばる
25.
6.4 Python の
ABI • pymalloc • ucs-4 • python3ではすべてucs-4ビルド
26.
6.5 wheelの名前規約からわかること • numpy-1.11.2rc1- cp35-cp35m-manylinux1_x86_64.whl –
numpy という名前のパッケージ – 1.11.2rc1 というバージョン – CPython 3.5 のAPI – CPython pymallocビルドのABI – manylinux1_x86_64 プラットフォーム
27.
6.6 manylinux1が想定するLinux環境 • Centos5.11相当 •
x86とx86_64の両方 • その他前提としてよいライブラリ
28.
6.7 manylinux1でインストールを期待 してよいライブラリ(1) • libpanelw.so.5 •
libncursesw.so.5 • libgcc_s.so.1 • libstdc++.so.6 • libm.so.6 • libdl.so.2 • librt.so.1 • libcrypt.so.1 • libc.so.6
29.
• libnsl.so.1
30.
6.8 manylinux1でインストールを期待 してよいライブラリ(2) • libutil.so.1 •
libpthread.so.0 • libX11.so.6 • libXext.so.6 • libXrender.so.1 • libICE.so.6 • libSM.so.6 • libGL.so.1 • libgobject-2.0.so.0
31.
• libgthread-2.0.so.0 • libglib-2.0.so.0
32.
6.9 auditwheel • linux向けwheelをmanylinux1に変換する ツール •
manylinux1を満たしているかチェック • 依存ライブラリをwheelに同梱させる • wheelファイル名のplatform tagをmanylinux1 に変更
33.
6.10 dockerを利用してパッケージを作 成する • docker
イメージが用意されている – quay.io/reposi- tory/pypa/manylinux1_x86_64 • CIでこのイメージを利用してパッケージング する – werckerやgitlabでは直接dockerイメージを 利用できる – travisなどでもCIのワークフロー中にdocker イメージを利用できる
34.
6.11 werckerでやってみよう box: id: quay.io/pypa/manylinux1_x86_64 registry:
quay.io build: steps: - script: name: build code: | /opt/python/cp35-cp35m/bin/pytho - script:
35.
name: test code: | /opt/python/cp35-cp35m/bin/pytho -
script: name: pack code: | /opt/python/cp35-cp35m/bin/pytho - script: name: audit code: | auditwheel repair dist/*.whl -w
36.
7 ソースディストリビューショ ン sdistとはなにか? •
setuptoolsとpipの実装でなんとなく決まって いる • ‘setup.py install‘ ができればsdist?
37.
7.1 setuptoolsがなくてもwheelパッ ケージは作成できる • wheelツールはsetuptoolsと独立して作られて いる •
distlibにもwheelを作成する処理が実装されて いる
38.
7.2 sdistを考え直す意味 • setuptools依存からの脱却 •
明確なインストールフロー
39.
7.3 現状のインストール手順 • pipがsdistをダウンロードする •
pipがsdistを展開する • pipがsetup.py bdist_wheelを実行する • できあがったwheelパッケージをpipがインス トールする • setup.py install は関係なかった
40.
7.4 PEP 518
– Specifying Minimum Build System Requirements for Python Projects • パッケージング方法やそれに必要なツールを支 持する • pypi上でwheel作成する目的? • パッケージングに必要なツールを記述 • pyproject.toml • TOMLフォーマット
41.
7.5 pyproject.toml [build-system] requires =
["setuptools", "wheel"]
42.
7.6 PEP 516
– Build system abstraction for pip/conda etc • ビルドツールの指定や依存性を記述する • 指定のツールでどのようにビルドするのかも 指定 • pypi.jsonというファイルで話が進んでいるっ ぽい • でも多分pyproject.tomの tool セクションが同 じものを指しているはず
43.
8 プログラミングPythonパッ ケージ • setuptoolsに依存せずにパッケージングしてみ よう
44.
8.1 distlibでできること • wheelパッケージ作成 •
wheelパッケージインストール • メタデータ作成 • パッケージリポジトリからのダウンロード • インストール済パッケージのリストアップ
45.
8.2 bib -
reversed pip • distlibと標準ライブラリのみで実行するパッ ケージングツール • 本日作成しました
46.
8.3 distlibを使う準備 >>> import
sys >>> import os >>> sys.path.append( ... os.path.join( ... os.getcwd(), ... ’distlib-0.2.3-py3-none-any.wh >>> import distlib >>> distlib
47.
9 プロジェクトの作成 • bib.init_project
48.
9.1 パッケージメタデータ • dist-info
ディレクトリ • pydist.json/package.json
49.
10 パッケージの作成
50.
10.1 wheelパッケージを作成する • 作業ディレクトリを作成 •
パッケージ名.dist-info ディレクトリを作成 • dist-info ディレクトリ以下に pydist.json をコ ピー • インストール対象を作業ディレクトリにコピー • distlib.wheelでWheelを作成する
51.
11 パッケージの配布 • 作成したパッケージを公開してインストール可 能にする •
simple package repository形式のサイトで公開 する • ダウンロードしてインストールする
52.
11.1 PEP 503
– Simple Repository API • pypiもこの形式 • 登録やアップロード方法は決められてない • ‘httplib.server‘ などでも実現可能
53.
11.2 wheelファイルをsimple package repository形式に配置する •
distlib.wheelでメタデータを取得 • パッケージ名でディレクトリを作成 • wheelファイルをコピー • そのディレクトリを対象に ‘httplib.server‘ を 立ち上げる
54.
12 インストール • パッケージをリポジトリからダウンロード •
パッケージのメタデータを読み取る • Wheelで読み取って、対象ディレクトリにイン ストール
55.
12.1 パッケージをリポジトリからダウ ンロードする • distlib.locators •
SimpleScrapingLocator • result.download_urls でURLを取得 • 一時ディレクトリに保存
56.
12.2 wheelパッケージをインストール する • distlib.scripts
ScriptMakerを作成 • distlib.wheelの install メソッドでインストール
57.
12.3 インストール一覧 • PEP
376 – Database of Installed Python Distributions • パッケージによってインストールされたファイ ルの情報 • どのモジュールがどのパッケージでインストー ルされたか • インストール時のファイルのハッシュ • distlib.database
58.
13 まとめ • setuptoolsやpipがなくてもパッケージングは できる •
いろんなツールがエコシステムに参加できるよ うにsdistの定義が検討されている • wheelはがんがん使いましょう
Download now