Python2からPython3への移行
ある程度おおきなPythonプロジェクトを #Python2 から #Python3 に移行するにはどうしたらよいか、のメモです。
利用するツール
six
python-future
2to3
オススメ手順
一気にPy3化する場合は、
2to3 でコードを自動変換したらある程度は書き換えできるかも
巨大なコードを段階的に移行するには、Py2/Py3両対応が必要
変換: python-futureの futurize --stage1 コマンドでexcept文やprint文のコードを自動変換
実装: six.moves でPy2/3で移動したパッケージに対応
https://pythonhosted.org/six/#module-six.moves にある移動パッケージ一覧が分かりやすい
実装: six で bytes/str/unicodeの調整
実装: iterの調整
実装: next() の調整
実装: map の調整
実装: ur"" リテラルの調整
実例
sphinx-doc/sphinx: native py2/py3 support without 2to3
sphinx-doc/sphinx: using six package for py2/3 compatibility without 2to3
資料
Python 2 から Python 3 への移植 - Python 3.7.0 ドキュメント
2011/11/07 blog ライブラリをPython3対応に書き換える
Python-3.3 リリース直前、ライブラリのPython2/3両対応
PyCon APAC 2013 in Tokyo
Python 2.5 から 3.3 で動作するツールの作り方(スライド) (動画)
2014/5/25 blog Sphinxメンテナ日記: 2to3やめてsixに切り換えました
既存のPython2実装の何かをPython3に移行する時の参考に
2011/04/23 blog pyreadline を2to3でPython2/3両対応にするメモ
ctypesでDLLをcallする場合、文字列をbytesで渡す必要がある
PyCon JP 2015
TOC思考プロセスで考える Python 2→3移行問題 2015-10-11 PyCon JP 2015 #MonotaRO 社での例
PyCon JP 2019
今がPython 2からPython 3へ移行するのにベストなタイミング:トークセッションレポート:Pythonイベント - @IT
「It’s 2019 and I’m still using Python 2. Should I be worried?」(2019年、まだPython 2を使っているんだ。心配する必要あるかな?)
Python 2がまだ使われている理由
ビジネスの観点からは、Python 2からPython 3への移行にはコストがかかりすぎる
移行よりも、新機能追加や緊急のバグフィックスが優先される
古いコードベースの移行は非常な困難を伴うかもしれない
Python3へ移行するメリット
Python 2のオフィシャルなサポートは近いうちに終了する
オフィシャルなサポートが終了したバージョンのPythonを使い続けずに済む
Python 3の方がPython 2よりも高速
便利な新機能も実装が続けられている
現在では多くのフレームワークやライブラリがPython 3へと移行を済ませている