SlideShare a Scribd company logo
1 of 58
Download to read offline
2016年9月21日
パッケージングを支える技術
PyCon JP 2016
Atsushi Odagiri
1 お前だれよ
• 小田切篤
• Beproud, Inc.
2 これまでのお話
• 2013 パッケージングの今と未来
• 2014 パッケージングの今
• 2015 Packaging最前線
3 アジェンダ
• パッケージングを支えるツール
• ソースパッケージ
• バイナリパッケージ
• パッケージングを支える技術に支えられてみ
よう
4 パッケージングを支える
ツール
• PyPA ってなに?
4.1 PyPA
• Python Packaging Authority
• パッケージングツールをメンテするグループ
• github.com/pypa
• bitbucket.org/pypa
4.2 PyPAの基本ツール
• setuptools
• virtualenv
• pip
• wheel
4.3 setuptools
• 配布物を作成する
• setup.pyで使われる
• easy_install使うのはもうやめましょう
• distributeも、いい加減忘れてください
• egg? あれは幻です
4.4 今日のsetuptools
• 27.2.0
• 去年(2016/9/6)18.3
4.5 virtualenv
• python環境を仮想化する
• プロジェクトごとに使うライブラリを隔離
• python3.3以降では同等の機能がpython本体か
ら提供されている(pyvenv)
4.6 pip
• インストーラ
• sdistとwheelを取り扱える
• requirements.txt でライブラリを構成管理する
4.7 wheel
• wheel形式パッケージを作成するツール
• setuptools に bdist_wheel サブコマンドを追
加する
4.8 ツールの導入方法
• python3.4以降ではpip,setuptoolsを導入する
ensurepipが入っているのでpythonインストー
ル後にpipを利用可能
• virtualenvは環境作成時にpip,setuptools,wheel
を導入する
• pyvenvはバージョンによって作成後のツール
導入が異なる
– 3.3 なし
– 3.4以降 ensurepipでpip,setuptoolsが導入さ
れる
• どの環境でもget-pip.py で
pip,setuptools,wheelを最新にできる
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 でツールを導入する
5 python標準の仕組み
• pypaツールはどのようにパッケージをインス
トールしてpythonインタプリタに認識させる
のか?
5.1 PYTHONPATHとsys.path
• 環境変数PYTHON_PATHで複数のディレク
トリを指定できる
• 指定した内容は ‘sys.path‘ に入る
• モジュールやパッケージを ‘import‘ するとき
は ‘sys.path‘ のディレクトリを探しに行く
• よくわからないところにインストールしても
sys.path に追加できればよい
5.2 site-packages/user-site-packages
• サードパーティ製ライブラリの標準インストー
ル先
• debianではさらに dist-packages という謎の
ディレクトリが存在する
• user-site-packages はユーザー権限でインス
トールできる
• user-site-packages にインストールするには
pipで ‘–user‘ オプションを使う
5.3 .pth
• site-packages などに配置されるファイル
• 中にファイルパスを羅列しておくと、インタプ
リタ起動時にすべて ‘sys.path‘ に追加される
• ‘./‘ 以外で始まる行があるとpythonコードとし
て実行されるという謎仕様
• easy_install が活用していた
5.4 distutils
• setup.py で使う setup 関数の大元
• setuptoolsはdistutilsの拡張
• 直接使うことはもうないはず
• 昔はこれで setup.py install などとしていた
6 バイナリディストリビュー
ション wheel
• wheelもう使ってるよね?
6.1 PEP 427 – The Wheel Binary
Package Format 1.0
• バイナリ形式の配布フォーマット
• 既に利用されている
• C拡張を含まない場合はpy2.py3で共通の配
布物
6.2 PEP 513 – A Platform Tag for
Portable Linux Built Distributions
• これまではLinux向けwheelはpypiにあげられ
なかった
• manylinux1
• linux向けのwheelを作るために決められた
6.3 Linux向けwheelパッケージのつら
いところ
• どのようなライブラリがあると想定してよ
いか?
• 依存するライブラリのABIが合わないなどのト
ラブル
• 依存ライブラリ同梱のためのハックがsetup.py
に散らばる
6.4 Python の ABI
• pymalloc
• ucs-4
• python3ではすべてucs-4ビルド
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 プラットフォーム
6.6 manylinux1が想定するLinux環境
• Centos5.11相当
• x86とx86_64の両方
• その他前提としてよいライブラリ
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
• libnsl.so.1
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
• libgthread-2.0.so.0
• libglib-2.0.so.0
6.9 auditwheel
• linux向けwheelをmanylinux1に変換する
ツール
• manylinux1を満たしているかチェック
• 依存ライブラリをwheelに同梱させる
• wheelファイル名のplatform tagをmanylinux1
に変更
6.10 dockerを利用してパッケージを作
成する
• docker イメージが用意されている
– quay.io/reposi-
tory/pypa/manylinux1_x86_64
• CIでこのイメージを利用してパッケージング
する
– werckerやgitlabでは直接dockerイメージを
利用できる
– travisなどでもCIのワークフロー中にdocker
イメージを利用できる
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:
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
7 ソースディストリビューショ
ン sdistとはなにか?
• setuptoolsとpipの実装でなんとなく決まって
いる
• ‘setup.py install‘ ができればsdist?
7.1 setuptoolsがなくてもwheelパッ
ケージは作成できる
• wheelツールはsetuptoolsと独立して作られて
いる
• distlibにもwheelを作成する処理が実装されて
いる
7.2 sdistを考え直す意味
• setuptools依存からの脱却
• 明確なインストールフロー
7.3 現状のインストール手順
• pipがsdistをダウンロードする
• pipがsdistを展開する
• pipがsetup.py bdist_wheelを実行する
• できあがったwheelパッケージをpipがインス
トールする
• setup.py install は関係なかった
7.4 PEP 518 – Specifying Minimum
Build System Requirements for
Python Projects
• パッケージング方法やそれに必要なツールを支
持する
• pypi上でwheel作成する目的?
• パッケージングに必要なツールを記述
• pyproject.toml
• TOMLフォーマット
7.5 pyproject.toml
[build-system]
requires = ["setuptools", "wheel"]
7.6 PEP 516 – Build system abstraction
for pip/conda etc
• ビルドツールの指定や依存性を記述する
• 指定のツールでどのようにビルドするのかも
指定
• pypi.jsonというファイルで話が進んでいるっ
ぽい
• でも多分pyproject.tomの tool セクションが同
じものを指しているはず
8 プログラミングPythonパッ
ケージ
• setuptoolsに依存せずにパッケージングしてみ
よう
8.1 distlibでできること
• wheelパッケージ作成
• wheelパッケージインストール
• メタデータ作成
• パッケージリポジトリからのダウンロード
• インストール済パッケージのリストアップ
8.2 bib - reversed pip
• distlibと標準ライブラリのみで実行するパッ
ケージングツール
• 本日作成しました
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
9 プロジェクトの作成
• bib.init_project
9.1 パッケージメタデータ
• dist-info ディレクトリ
• pydist.json/package.json
10 パッケージの作成
10.1 wheelパッケージを作成する
• 作業ディレクトリを作成
• パッケージ名.dist-info ディレクトリを作成
• dist-info ディレクトリ以下に pydist.json をコ
ピー
• インストール対象を作業ディレクトリにコピー
• distlib.wheelでWheelを作成する
11 パッケージの配布
• 作成したパッケージを公開してインストール可
能にする
• simple package repository形式のサイトで公開
する
• ダウンロードしてインストールする
11.1 PEP 503 – Simple Repository API
• pypiもこの形式
• 登録やアップロード方法は決められてない
• ‘httplib.server‘ などでも実現可能
11.2 wheelファイルをsimple package
repository形式に配置する
• distlib.wheelでメタデータを取得
• パッケージ名でディレクトリを作成
• wheelファイルをコピー
• そのディレクトリを対象に ‘httplib.server‘ を
立ち上げる
12 インストール
• パッケージをリポジトリからダウンロード
• パッケージのメタデータを読み取る
• Wheelで読み取って、対象ディレクトリにイン
ストール
12.1 パッケージをリポジトリからダウ
ンロードする
• distlib.locators
• SimpleScrapingLocator
• result.download_urls でURLを取得
• 一時ディレクトリに保存
12.2 wheelパッケージをインストール
する
• distlib.scripts ScriptMakerを作成
• distlib.wheelの install メソッドでインストール
12.3 インストール一覧
• PEP 376 – Database of Installed Python
Distributions
• パッケージによってインストールされたファイ
ルの情報
• どのモジュールがどのパッケージでインストー
ルされたか
• インストール時のファイルのハッシュ
• distlib.database
13 まとめ
• setuptoolsやpipがなくてもパッケージングは
できる
• いろんなツールがエコシステムに参加できるよ
うにsdistの定義が検討されている
• wheelはがんがん使いましょう

More Related Content

What's hot

分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsYoshiyasu SAEKI
 
Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介morihisa
 
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
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!Tetsutaro Watanabe
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメSatoshi Takami
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較Akihiro Suda
 
Spring Cloud Data Flow で構成される IIJ IoTサービス
Spring Cloud Data Flow で構成される IIJ IoTサービスSpring Cloud Data Flow で構成される IIJ IoTサービス
Spring Cloud Data Flow で構成される IIJ IoTサービスKenji Kondo
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Apache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once SemanticsApache Kafka 0.11 の Exactly Once Semantics
Apache Kafka 0.11 の Exactly Once Semantics
 
Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介Wireshark だけに頼らない! パケット解析ツールの紹介
Wireshark だけに頼らない! パケット解析ツールの紹介
 
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 発表資料)
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Spring Cloud Data Flow で構成される IIJ IoTサービス
Spring Cloud Data Flow で構成される IIJ IoTサービスSpring Cloud Data Flow で構成される IIJ IoTサービス
Spring Cloud Data Flow で構成される IIJ IoTサービス
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 

Viewers also liked

パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡Atsushi Odagiri
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016Akinori Kohno
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)kikuchan98
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今Atsushi Odagiri
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術Atsushi Odagiri
 
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術a know
 
自分のチームをどう作る?
自分のチームをどう作る?自分のチームをどう作る?
自分のチームをどう作る?Masakatsu Sugii
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Shinya Okano
 
PyCon JP 2016 Talk#024 ja
 PyCon JP 2016 Talk#024 ja PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 jadrillan
 
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpShinichi Nakagawa
 
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法x1 ichi
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)x1 ichi
 
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門Hironori Sekine
 
Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析Hiroaki Sengoku
 
はてなブックマーク in Scala
はてなブックマーク in Scalaはてなブックマーク in Scala
はてなブックマーク in ScalaLintaro Ina
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化Lintaro Ina
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 

Viewers also liked (20)

パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
 
セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術セールスエンジニアとして今後身につけていきたい技術
セールスエンジニアとして今後身につけていきたい技術
 
Import community pycon jp
Import community pycon jpImport community pycon jp
Import community pycon jp
 
自分のチームをどう作る?
自分のチームをどう作る?自分のチームをどう作る?
自分のチームをどう作る?
 
Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016Python入門 コードリーディング - PyConJP2016
Python入門 コードリーディング - PyConJP2016
 
PyCon JP 2016 Talk#024 ja
 PyCon JP 2016 Talk#024 ja PyCon JP 2016 Talk#024 ja
PyCon JP 2016 Talk#024 ja
 
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjp
 
あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法あなたのScalaを爆速にする7つの方法
あなたのScalaを爆速にする7つの方法
 
あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)あなたのScalaを爆速にする7つの方法(日本語版)
あなたのScalaを爆速にする7つの方法(日本語版)
 
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
 
Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析Pythonではじめるロケーションデータ解析
Pythonではじめるロケーションデータ解析
 
はてなブックマーク in Scala
はてなブックマーク in Scalaはてなブックマーク in Scala
はてなブックマーク in Scala
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 

Similar to パッケージングを支える技術 pyconjp2016

パッケージングの呼び声 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
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4Satoshi Yazawa
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpYoshifumi Yamaguchi
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Shogo Kawahara
 
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版VirtualTech Japan Inc./Begi.net Inc.
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」ManaMurakami1
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来Kazuto Kusama
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Kazuto Kusama
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールするTokorosawaYoshio
 
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみたApache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみたJunichi Noda
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望Tetsuo Yamabe
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話R S
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話Yahoo!デベロッパーネットワーク
 
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェストCode4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェストMasao Takaku
 

Similar to パッケージングを支える技術 pyconjp2016 (20)

パッケージングの呼び声 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
 
Products.PloneOrg
Products.PloneOrgProducts.PloneOrg
Products.PloneOrg
 
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4dodaiのProvisioning周辺探訪 - dodai勉強会 #4
dodaiのProvisioning周辺探訪 - dodai勉強会 #4
 
Pythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjpPythonを取り巻く開発環境 #pyconjp
Pythonを取り巻く開発環境 #pyconjp
 
go-apt-cacher/mirror
go-apt-cacher/mirrorgo-apt-cacher/mirror
go-apt-cacher/mirror
 
210728 mpy
210728 mpy210728 mpy
210728 mpy
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版今さら聞けない人のためのGit超入門 OSC2018名古屋版
今さら聞けない人のためのGit超入門 OSC2018名古屋版
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
Firefoxの開発ツール
Firefoxの開発ツールFirefoxの開発ツール
Firefoxの開発ツール
 
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
ひしめき合うOpen PaaSを徹底解剖! PaaSの今と未来
 
200527 ur
200527 ur200527 ur
200527 ur
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座
 
2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする2分でパッケージを作ってインストールする
2分でパッケージを作ってインストールする
 
Apache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみたApache sparkでつぶやきビッグデータ クローンをつくってみた
Apache sparkでつぶやきビッグデータ クローンをつくってみた
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
 
Osoljp201210 oi swift
Osoljp201210 oi swiftOsoljp201210 oi swift
Osoljp201210 oi swift
 
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
GitLab から GitHub + CircleCI に乗り換えてチーム運用を改善しつつある話
 
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
JSUG 2018/02/05 SpringOnePlatform2017参加報告 プラットフォーム関連のお話
 
Code4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェストCode4Lib 2010報告会・発表ダイジェスト
Code4Lib 2010報告会・発表ダイジェスト
 

More from Atsushi Odagiri

async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022Atsushi 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
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私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
 
フレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミングフレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミングAtsushi 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
 
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での開発を効率的に進めるためのツール設定
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
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
 
Form libraries
Form librariesForm libraries
Form libraries
 
フレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミングフレームワークなしでWSGIプログラミング
フレームワークなしでWSGIプログラミング
 
Form libraries
Form librariesForm libraries
Form libraries
 
Aodag scaffold
Aodag scaffoldAodag scaffold
Aodag scaffold
 

パッケージングを支える技術 pyconjp2016