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章ではこれまでの各章でカバーされなかった細々したことを説明します。