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