Enviar pesquisa
Carregar
Python 2/3コード共存戦略 #osakapy
•
7 gostaram
•
9,829 visualizações
敦志 金谷
Seguir
大阪Pythonユーザの集まり 2014/05 発表資料 http://osakapy.connpass.com/event/6369/
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 31
Baixar agora
Baixar para ler offline
Recomendados
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
道具としての機械学習:直感的概要とその実際
道具としての機械学習:直感的概要とその実際
Ichigaku Takigawa
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Jun Kurihara
第2回Matlantis User Conference_20230421_畠山歓先生
第2回Matlantis User Conference_20230421_畠山歓先生
Matlantis
[DL輪読会]Causality Inspired Representation Learning for Domain Generalization
[DL輪読会]Causality Inspired Representation Learning for Domain Generalization
Deep Learning JP
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
Deep Learning JP
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
harmonylab
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
Fujio Kojima
Recomendados
HTTP2 最速実装 〜入門編〜
HTTP2 最速実装 〜入門編〜
Kaoru Maeda
道具としての機械学習:直感的概要とその実際
道具としての機械学習:直感的概要とその実際
Ichigaku Takigawa
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Jun Kurihara
第2回Matlantis User Conference_20230421_畠山歓先生
第2回Matlantis User Conference_20230421_畠山歓先生
Matlantis
[DL輪読会]Causality Inspired Representation Learning for Domain Generalization
[DL輪読会]Causality Inspired Representation Learning for Domain Generalization
Deep Learning JP
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
[DL輪読会]Convolutional Conditional Neural Processesと Neural Processes Familyの紹介
Deep Learning JP
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
harmonylab
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
C# でニューラルネットワークをスクラッチで書いて機械学習の原理を理解しよう
Fujio Kojima
テンソル分解を用いた教師なし学習による変数選択
テンソル分解を用いた教師なし学習による変数選択
Y-h Taguchi
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
弘毅 露崎
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
多変量解析
多変量解析
Yoshihiro_Handa
PRML 1.6 情報理論
PRML 1.6 情報理論
sleepy_yoshi
PPAPを何とかしたいがPHSも何とかしたい
PPAPを何とかしたいがPHSも何とかしたい
UEHARA, Tetsutaro
PsychoPyを使った初学者向けの心理実験環境の構築
PsychoPyを使った初学者向けの心理実験環境の構築
Hirokazu Ogawa
XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性
西岡 賢一郎
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
Hironobu Isoda
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
PsychoPy Builder:Code Componentの使い方
PsychoPy Builder:Code Componentの使い方
HiroyukiSogo
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
gree_tech
静的型付け言語Python
静的型付け言語Python
kiki utagawa
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
GentaYoshimura
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
Rの高速化
Rの高速化
弘毅 露崎
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
Shinnosuke Takamichi
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
Kenta IDA
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
Mais conteúdo relacionado
Mais procurados
テンソル分解を用いた教師なし学習による変数選択
テンソル分解を用いた教師なし学習による変数選択
Y-h Taguchi
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
弘毅 露崎
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
多変量解析
多変量解析
Yoshihiro_Handa
PRML 1.6 情報理論
PRML 1.6 情報理論
sleepy_yoshi
PPAPを何とかしたいがPHSも何とかしたい
PPAPを何とかしたいがPHSも何とかしたい
UEHARA, Tetsutaro
PsychoPyを使った初学者向けの心理実験環境の構築
PsychoPyを使った初学者向けの心理実験環境の構築
Hirokazu Ogawa
XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性
西岡 賢一郎
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
Hironobu Isoda
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
PsychoPy Builder:Code Componentの使い方
PsychoPy Builder:Code Componentの使い方
HiroyukiSogo
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
gree_tech
静的型付け言語Python
静的型付け言語Python
kiki utagawa
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
Preferred Networks
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
GentaYoshimura
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
Keisuke Fukuda
TiDBのトランザクション
TiDBのトランザクション
Akio Mitobe
Rの高速化
Rの高速化
弘毅 露崎
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
Shinnosuke Takamichi
Mais procurados
(20)
テンソル分解を用いた教師なし学習による変数選択
テンソル分解を用いた教師なし学習による変数選択
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
文献注釈情報MeSHを利用した網羅的な遺伝子の機能アノテーションパッケージ
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
多変量解析
多変量解析
PRML 1.6 情報理論
PRML 1.6 情報理論
PPAPを何とかしたいがPHSも何とかしたい
PPAPを何とかしたいがPHSも何とかしたい
PsychoPyを使った初学者向けの心理実験環境の構築
PsychoPyを使った初学者向けの心理実験環境の構築
XAI (説明可能なAI) の必要性
XAI (説明可能なAI) の必要性
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
オンライン広告入札システムとZGC ( JJUG CCC 2021 Spring )
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
PsychoPy Builder:Code Componentの使い方
PsychoPy Builder:Code Componentの使い方
ブラックボックス最適化とその応用
ブラックボックス最適化とその応用
静的型付け言語Python
静的型付け言語Python
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
最新リリース:Optuna V3の全て - 2022/12/10 Optuna Meetup #2
KDD Cup 2021 時系列異常検知コンペ 参加報告
KDD Cup 2021 時系列異常検知コンペ 参加報告
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
Effective Modern C++ 勉強会 Item 22
Effective Modern C++ 勉強会 Item 22
TiDBのトランザクション
TiDBのトランザクション
Rの高速化
Rの高速化
音声合成のコーパスをつくろう
音声合成のコーパスをつくろう
Semelhante a Python 2/3コード共存戦略 #osakapy
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
Kenta IDA
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
Taiji Tsuchiya
Why python
Why python
Mikio Kubo
Why python
Why python
Mikio Kubo
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
Yutaka Kato
鳥取python勉強会 第1回
鳥取python勉強会 第1回
Yuji Oyamada
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
虎の穴 開発室
Python3と向かい合ってみる
Python3と向かい合ってみる
Atsuo Ishimoto
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
Kir Chou
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
Katsuhiro Morishita
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
Takanori Suzuki
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
civicpg
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
敦志 金谷
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
Akishige TAKEKOSHI
鳥取python勉強会 第2回
鳥取python勉強会 第2回
Yuji Oyamada
Ruby開発の現場を支える技術
Ruby開発の現場を支える技術
hiroponz
Python札幌 2012/06/17
Python札幌 2012/06/17
Shinya Okano
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
Python languageupdate (2004)
Python languageupdate (2004)
泰 増田
スクレイピングとPython
スクレイピングとPython
Hironori Sekine
Semelhante a Python 2/3コード共存戦略 #osakapy
(20)
MicroPythonのCモジュールを作ってみる
MicroPythonのCモジュールを作ってみる
明日からはじめるネットワーク運用自動化
明日からはじめるネットワーク運用自動化
Why python
Why python
Why python
Why python
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
GBDC 勉強会 #1 Python を用いたツール作成工数の最小化
鳥取python勉強会 第1回
鳥取python勉強会 第1回
2017/12/21 虎の穴 Python勉強会
2017/12/21 虎の穴 Python勉強会
Python3と向かい合ってみる
Python3と向かい合ってみる
Python パッケージの影響を歴史から理解してみよう!
Python パッケージの影響を歴史から理解してみよう!
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
私の好きなPython構文 vol.2 #nds46
私の好きなPython構文 vol.2 #nds46
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
鳥取python勉強会 第2回
鳥取python勉強会 第2回
Ruby開発の現場を支える技術
Ruby開発の現場を支える技術
Python札幌 2012/06/17
Python札幌 2012/06/17
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Python languageupdate (2004)
Python languageupdate (2004)
スクレイピングとPython
スクレイピングとPython
Python 2/3コード共存戦略 #osakapy
1.
Python 3世代が考える(?) Python 2/3コード共存戦略 金谷
敦志 2014-05-29 #osakapy 1
2.
自己紹介 • 金谷 敦志
(Twitter: @todogzm) • 株式会社ラクス 北米市場向けWebサービス Rigniteの開発に従事 • 先日オフィス移転しました! 2
3.
自己紹介 • Python歴は1年半 • テキスト分類にPythonを使用 •
recurly-client-pythonのPython 2/3対応 • Check.iO Level 11 (前回と比べて+1) • http://www.checkio.org/user/todogzm/ 3
4.
目次 • Python 3世代のつらみ •
Python 3.xの変更点 • Python 2/3コード共存戦略 4
5.
Python 3世代のつらみ • Check.iOのFriendly
numberを解いていたときのお話 • 0.3Mの部分を取得するには、12341234 / (1000 ** 2) - 12だ! 5
6.
• >>> 12341234
/ (1000 ** 2) - 12 0 • えっ…? えっ?(狼狽) 6
7.
$ python -V Python
2.7.5 7 _人人人人人人人人人人人人_ > int / intはintが返る <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
8.
Python 2→3の変更点 • 古い構文や関数の削除 •
print文はprint関数に • unicodeリテラルの廃止 → Python 3.3で復活 • except Error, eはexcept Error as eに • 関数の削除 → raw_input(), reduce(), apply(), xargs(), unicode(), has_key(), … • ライブラリの整理統合 • 特にhttp周りの整理がWeb系開発者にはツラい • 解釈が変わっちゃった… • 文字列はstr1つのみ!Unicode! bytesとの暗黙的な変換はできない! • int / int はfloatを返す 8
9.
他にも色々… • 自分がハマった経験 • Python
2のhttplib.HTTPMessageはコンストラクタ 引数にHTTPレスポンスのテキストを渡すとヘッダもパー ズする。が、Python 3のhttp.client.HTTPMessage はそういう処理がなかった… orz • HTTPコネクションに対するレスポンスのヘッダ部分が 2だとイテレータ型なのに3だとイテレータ型じゃなかっ た… orz 9
10.
Python 3もそれなりにハマる! でも2よりはハマらないよ!(多分) 10
11.
さぁ今すぐにPython 3…ん? • と思ったらPython
2.7 2020年まで延命のお知らせ • 膨大な資産もあるし、ちょっと今すぐPython 2を捨てられない! 11
12.
Python 3世代の感触 • 3.x対応しているライブラリが多いので、そろそ ろ移行しても困らない事が多いので移行しよう •
ライブラリ開発者は2.xから離れられない! • 2.x / 3.x両対応がツラいが、戦略を持って行 えば何とかなる!かもしれない 12
13.
Python 2/3 コード共存戦略 13
14.
まずはじめに • 公式文書がよく出来ているので、穴が空くほど 読む • http://docs.python.jp/3.3/howto/ pyporting.html 14
15.
共通して行う作業 • 2系、3系それぞれサポートするバージョンを決める • お勧めは2.7と3.3 •
テストコードを書いておく • toxを使い複数バージョンでテストする環境を用意 する • 2系のコードであれば、from __future__を使う 15
16.
tox • Pythonライブラリを複数のPythonバージョンでテストする ためのツール • 各Pythonバージョンのvirtualenvを作成してテスト実行 •
設定ファイルtox.iniに下記を書いて実行 • Pythonのバージョン (複数指定可) • 実行したいテストのコマンド • テスト実行に使うモジュール 16
17.
コード共存の戦略 • Sixを使う (同じコードベースで2/3両方動かす) •
Python 3のコードに対して3to2を使う (保守するコードはPython 3ベース) • Python 2のコードに対して2to3を使う • Sixもコード変換も使わず2/3互換を目指す 17
18.
Sixを使う場合 • Python 2と3の違いを吸収するライブラリ •
https://pythonhosted.org/six/ 18
19.
Sixを使う場合 • ライブラリの整 理統合に対して はsix.moves が 2/3の違いを吸収 •
ある程度の構文 の違いもライブ ラリでカバー • six.u(), six.b() 19
20.
Sixを使う場合 • メリット • 互換性問題に対する多くの解決策を提供してくれる •
メンテナンスするコードが1種類だけになる • デメリット • 依存ライブラリが1コ増える • IDEがsix.movesを解釈してくれない場合がある 20
21.
Python 3のコードに対して 3to2を使う • Python
3系のコードを2系に変換するツール • 名前の割に(?)実行時にはPython 2.7が必須 • パッケージ配布の際には自動で動くようにする (setup.py内で自動変換のコードを書く) • https://wiki.python.org/moin/3to2 21
22.
3to2の実行結果例 22
23.
3to2を使う場合 • メリット • 2to3と比較してコード変換精度が高い •
Python 3の構文が利用できる • デメリット • サードパーティーのプロジェクトであること • 新しい構文に対応していない場合があること 23
24.
Python 2のコードに対して 2to3を使う • Python
2のコードを3に変換するツール • Python標準ツール 24
25.
2to3を使う場合 • メリット • 標準搭載 •
変換そのものの不具合は少ない • futureを多用すれば変換精度が高い • デメリット • Python 2のあいまいな挙動 25
26.
Sixもコード変換も使わず2/3 互換を目指す • 【警告】 の道 •
構文エラー! → 古い構文の書き直し • ライブラリが見つからない! → バージョンごとに 読み込むライブラリを変更 • Can't convert 'bytes' object to str implicitly 26 orz
27.
Sixもコード変換も使わず2/3 互換を目指す • それでも頑張るのであれば、下記は必須 • Python
2系の動作環境は2.7のみ • from __future__ は積極的に使う • 早めに諦める気持ちを持つ 27
28.
Sixもコード変換も使わず2/3 互換を目指す • メリット • メンテナンスするコードが1種類だけになる •
デメリット • メリットを忘れさせるのに十分な障壁がある 28
29.
コード共存のまとめ • サポートするPythonバージョンを決める • テストを書き、toxで複数バージョンをテストす る環境を整備する •
自分の環境に合った戦略を選ぶ (Six, 2to3, 3to2…) 29
30.
現在活動中 • 増田さん作のelapheのPython 3対応を模索中 •
Sixもコード変換も使わず…挫折中 orz • おとなしく2to3作戦でいきます… 30
31.
おわり 31
Baixar agora