1. 始めに¶
Python2系列の開発およびサポートは2020年1月1日以降は完全に停止するとのアナウンス されています (PEP-344 PEP-344 web page)(現時点 2024年02月16日 では既にEOLが宣言され, 更新は完全に停止されています。) 。
上記の期限をすぎた後も、Python2.7が直ちに使用不能となる訳ではありませんが、 セキュリティパッチも供給されず、新しい機能の追加もなくなります。 なるだけ早くPython3への移行を進めるしか方法は無いようです。 この小文では、いくつかのpython2プログラムをPython2/Python3対応に書き換えた経験を 踏まえて、python2プログラムをPython3対応のプログラムに書き換える際の幾つかのヒントを まとめています。
幸いなことに、Pyhton2からPython3への移行をサポートするためのツールやモジュールが用意されています。
2to3
プログラムはPythonの標準配布に含まれるモジュール/ツールで、
python2プログラムをpython3プログラムに書き換えてくれます。
この2to3
の使い方は次の第3章で説明します。
2to3
はpython2からpython3への主な文法上の変更点を自動的に行ってくれます.
しかしながら、いくつかの場合には、2to3
で変換したプログラムを実行することは
できるものの、結果が意図した物とは異なる場合がありました。此の場合には、
2to3
で変換したプログラムに手を加える必要がありました。
特に、計測機器などとのバイナリデータのやり取りを行う場合には、python2とpython3での
文字列の扱いの違い(python2では bytes 列、python3ではユニコード文字列)に注意が必要です。
1第4章ではこれについて説明します。
また、2to3で変換したスクリプトはpython3で動作しますが、そのままではpython2では
動作しなくなることもママ有ります。future
モジュールをpython2に導入することによって、
2to3で変換したプログラムがpython2でも動作するようにすることが容易になります。
future
モジュールは標準モジュールではないものの、広く使われています。
第5章 でこのfuture
モジュールを紹介します。
プログラムがpython2およびpython3の双方に対応させるのをサポートするモジュール
six
も広く使われています。これについて続く第6章で触れます。
私がPython3対応に書き換えたプログラムには、Cythonを使ったプログラムも含まれています。 その際に注意すべき点について、第7章で説明します。
py2app
py2exe
は Macitosn OS および Windows OS でそれぞれ
pythonで作成したプログラムをスタンドアローン アプリケーションに変換するプログラムです。
実際にはPythonプログラムにラッパーをかけて、単独アプリケーションとして動作するようにしています。
これらツールもサポートされる環境がPython3に移行する方向で進んでいます。
実際新しいWindowsのバージョンで動作するpy2exeは Python3のみで動作します。 一方、Macintosh OSではシステム付属のpythonはpython2系であるために、システム機能を,特にGUI環境,を 安定に利用するためには システム付属の /usr/bin/pythonw を使う必要があります。 (MacOSでもpython2のサポートは廃止の予定であり、現段階ではpython2もまだ利用可能ではありますが、 python3への移行をすすめる必要があります。)
その際に注意すべき点について、第8章で説明します。
第9章ではこれまでの各章でカバーされなかった細々したことを説明します。