SlideShare a Scribd company logo
1 of 97
Download to read offline
Python2と3の互換性問題に
立ち向かうときに
まずやること
@utgwkk
こんにちは
@utgwkk
第39代(副)広報
(副)広報……?
経緯がありました
Pythonを書いている
自己紹介ここまで
動的型付け言語
機械学習・数値計算で
よく使われる
Rubyと似てるって
よく言われる
分からなければ
そういうイメージで
Pythonについて
調べてると
発生すること
2と3ってのが
あるらしいぞ
このコードは2でしか
動かないっぽいぞ
Python2と3の違い
文字列型
Python2だと?
strとunicode
8bit型文字列
文字コード情報なし
デフォルトエンコーディング
ASCII
マルチバイト文字列に弱い
リソースを取得するたびに
うまくエンコード/デコードしまく
る
とてもつらい
Python3だと?
str(unicode)
文字コード情報を保持
いい話
以前までのstrは?
bytes型として現役
組み込み関数の
返り値の型の変更
一例
リスト→イテレータ
イテレータ?
要素を1つずつ返す
オブジェクト
リストより軽い
Pythonの典型的な
for文の例
Python2だと?
for i in range(100):
0~99までiを回す
range(100)って?
[0, 1, …, 99] という
リストを返す
for i in range(10000000):
[0, 1, …, 9999999]
というリストを返す
10000000個の要素
を持ったリストが都度
作られる
重すぎる
私はただループを回
したいだけなんだ
for i in xrange(10000000):
0, 1, …, 9999999を
順に渡すイテレータを
返す
軽い
range
いらなくない?
Python3だと?
for i in range(10000000):
0, 1, …, 9999999を
順に渡すイテレータを
返す
いいですね
range がリストを返す
のに依存する実装が
バグりそう
range だけじゃない
2でリストを返してい
た組み込み関数
3ではイテレータを返
すようになった
標準ライブラリの
改名
urllib系が特に大きく
影響を受けた
他にもいろいろ
整数同士の割り算
例外処理の構文
後方互換性の破壊
古いバージョンのことは切
り捨てればよいのでは?
そうもいかない
我々は常に最新の
バージョンのみを利用
できるわけではない
時には古いバージョンの
コードと付き合う
必要が生じてくる
Python2から3への
移行
2to3使いましょう
http://docs.python.jp/3/library/2to3.html
$ 2to3 -w hoge.py
Python2のコードを
3のコードに
書き換えてくれる
大抵は何とかなる
何とかならない場合も
あります
ライブラリの依存
ライブラリも
Python3未対応
うまくやっていきましょ
う
Python2と3で
互換性を維持
six使いましょう
$ pip install six
2と3で変更のある
ところをラップ
いい感じに互換性を
保つことができる
Python3から2へ
ダウングレード
がんばってください
six使いましょう
(再掲)
まとめ
あらゆるプロジェクトが
Python3に完全に移行され
れば解決
なかなかそうもいかないので
いろいろな便利モジュールで
うまく凌いでいきましょう
six使いましょう
(再々掲)
ご清聴ありがとう
ございました
質問?

More Related Content

What's hot

Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Masato Fujitake
 
Pythonでアルゴレイヴの世界に足を踏み入れる
Pythonでアルゴレイヴの世界に足を踏み入れるPythonでアルゴレイヴの世界に足を踏み入れる
Pythonでアルゴレイヴの世界に足を踏み入れるksnt
 
Character level CNN [CNNで自然言語処理]
Character level CNN [CNNで自然言語処理]Character level CNN [CNNで自然言語処理]
Character level CNN [CNNで自然言語処理]tdualdir
 
初心者が Python で戸惑ったところ
初心者が Python で戸惑ったところ初心者が Python で戸惑ったところ
初心者が Python で戸惑ったところEmma Haruka Iwao
 
新人プログラマーが気に入ったPythonの基礎の基礎
新人プログラマーが気に入ったPythonの基礎の基礎新人プログラマーが気に入ったPythonの基礎の基礎
新人プログラマーが気に入ったPythonの基礎の基礎iPride Co., Ltd.
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタkiwofusi
 
Twitterでネットストーカーをしよう
TwitterでネットストーカーをしようTwitterでネットストーカーをしよう
Twitterでネットストーカーをしようよしだ あつし
 
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまで
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまでprint("Hello World")を実行する - Pythonコードからスタック型仮想マシンまで
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまでRichard Rowland
 
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析Preferred Networks
 

What's hot (12)

Pythonでターミナルに画像表示
Pythonでターミナルに画像表示Pythonでターミナルに画像表示
Pythonでターミナルに画像表示
 
Pythonでアルゴレイヴの世界に足を踏み入れる
Pythonでアルゴレイヴの世界に足を踏み入れるPythonでアルゴレイヴの世界に足を踏み入れる
Pythonでアルゴレイヴの世界に足を踏み入れる
 
Character level CNN [CNNで自然言語処理]
Character level CNN [CNNで自然言語処理]Character level CNN [CNNで自然言語処理]
Character level CNN [CNNで自然言語処理]
 
初心者が Python で戸惑ったところ
初心者が Python で戸惑ったところ初心者が Python で戸惑ったところ
初心者が Python で戸惑ったところ
 
新人プログラマーが気に入ったPythonの基礎の基礎
新人プログラマーが気に入ったPythonの基礎の基礎新人プログラマーが気に入ったPythonの基礎の基礎
新人プログラマーが気に入ったPythonの基礎の基礎
 
Python3でwebアプリ
Python3でwebアプリPython3でwebアプリ
Python3でwebアプリ
 
Lt python腕試しネタ
Lt python腕試しネタLt python腕試しネタ
Lt python腕試しネタ
 
Twitterでネットストーカーをしよう
TwitterでネットストーカーをしようTwitterでネットストーカーをしよう
Twitterでネットストーカーをしよう
 
Python勉強会 2015-12-02
Python勉強会 2015-12-02Python勉強会 2015-12-02
Python勉強会 2015-12-02
 
Osc2012 hiroshima
Osc2012 hiroshimaOsc2012 hiroshima
Osc2012 hiroshima
 
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまで
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまでprint("Hello World")を実行する - Pythonコードからスタック型仮想マシンまで
print("Hello World")を実行する - Pythonコードからスタック型仮想マシンまで
 
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
 

Viewers also liked

生活に潤いを与える技術
生活に潤いを与える技術生活に潤いを与える技術
生活に潤いを与える技術kiki utagawa
 
はてブ未読管理
はてブ未読管理はてブ未読管理
はてブ未読管理kiki utagawa
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy敦志 金谷
 
あたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなしあたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなしkiki utagawa
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Pythonkiki utagawa
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 

Viewers also liked (6)

生活に潤いを与える技術
生活に潤いを与える技術生活に潤いを与える技術
生活に潤いを与える技術
 
はてブ未読管理
はてブ未読管理はてブ未読管理
はてブ未読管理
 
Python 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapyPython 2/3コード共存戦略 #osakapy
Python 2/3コード共存戦略 #osakapy
 
あたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなしあたらしい伺かを動かしてみたはなし
あたらしい伺かを動かしてみたはなし
 
静的型付け言語Python
静的型付け言語Python静的型付け言語Python
静的型付け言語Python
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 

Similar to Python2と3の互換性問題に立ち向かうときにまずやること

S03 t2 sta_py_tsuji_0810_slides
S03 t2 sta_py_tsuji_0810_slidesS03 t2 sta_py_tsuji_0810_slides
S03 t2 sta_py_tsuji_0810_slidesTakeshi Akutsu
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Tetsuya Morimoto
 
「Python 機械学習プログラミング」 の挫折しない読み方
「Python 機械学習プログラミング」の挫折しない読み方「Python 機械学習プログラミング」の挫折しない読み方
「Python 機械学習プログラミング」 の挫折しない読み方Hiroki Yamamoto
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうEsehara Shigeo
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話Satoshi Yamada
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめcocu_628496
 

Similar to Python2と3の互換性問題に立ち向かうときにまずやること (7)

S03 t2 sta_py_tsuji_0810_slides
S03 t2 sta_py_tsuji_0810_slidesS03 t2 sta_py_tsuji_0810_slides
S03 t2 sta_py_tsuji_0810_slides
 
Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)Python と型ヒント (Type Hints)
Python と型ヒント (Type Hints)
 
「Python 機械学習プログラミング」 の挫折しない読み方
「Python 機械学習プログラミング」の挫折しない読み方「Python 機械学習プログラミング」の挫折しない読み方
「Python 機械学習プログラミング」 の挫折しない読み方
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
本気でPythonで宛名書きした話
本気でPythonで宛名書きした話本気でPythonで宛名書きした話
本気でPythonで宛名書きした話
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめ
 
Pythonのすすめ
PythonのすすめPythonのすすめ
Pythonのすすめ
 

Python2と3の互換性問題に立ち向かうときにまずやること