Python 2 EOL:Python2の終わりを乗り切る方法

2020年1月1日をもって、Pythonプログラミング言語の2.xブランチは、その作成者であるPython SoftwareFoundationによってサポートされなくなりました。この日付は、何年にもわたって続いてきたドラマの集大成であり、Pythonの古い、能力の低い、広く使用されているバージョンから、前任者の採用に続いている新しい、より強力なバージョンへの移行です。

そろそろ時間です。Python 2に比べて数え切れないほどの技術的およびエンドユーザーの機能強化を備えたPython3は、Python 2を恒久的に置き換えるのにこれほど良い位置にありませんでした。 Python 3をサポートします。Python3は、多くのLinuxディストリビューションのデフォルトのPythonインタープリターになっています。そして、最近のほとんどすべての本、コーディングアカデミー、およびオンラインチュートリアルでは、初心者にPython3を推奨しています。

今悪いニュース。Python 2は、Windows 7(またはWindows XP!)のように、今後何年にもわたって使用されます。私たちの多くは、Python 2で記述されたアプリに依存し続けます。内部の制限により、新しいアプリにPython2を使用し続ける人もいます。急速にPython3の世界になりつつある中で、Python 2に固執している場合は、どうすればよいですか?オプションを見てみましょう。 

Python 2のサポート終了:その意味

Python 2がEOL(サポート終了)になることについて理解するための最初で最も重要なこと:Python2アプリケーションは引き続き実行されます。これを2000年問題とは考えないでください。2020年1月1日にPython2アプリケーションがすべて魔法のように停止し ます。コアPython開発チームによるPython2の公式サポートはこれ以上ありません。

Python 2EOLの実際的な意味は次のとおりです。

  • Python2の公式のバグ修正とセキュリティパッチは終了します。 Python2インタープリターまたはPython2標準ライブラリで新たに発見された問題は、コア開発チームによって修正されることはありません。ただし、商用ベンダーはPython 2を独自に維持でき、他のサードパーティはPython 2コードベースをフォークして、コアチームが中断したところから続行できます。(これについては後で詳しく説明します。)
  • サードパーティのPythonプロジェクトはPython2を放棄します。Python2とPython3の両方をサポートしているライブラリは、リソースをPython3専用に使用し始めます。これらのプロジェクトの多くはボランティアによって運営されており、言語の1つのバージョンだけをサポートするのははるかに少ない作業です。各プロジェクトはそれ自体でPython2のサポートを決定しますが、多くの主要なPythonプロジェクトは、2020年までにPython2のサポートを完全に廃止することを約束しています。
  • Python2のプラットフォームサポートは衰退します。Linuxディストリビューションとクラウドサービスプロバイダーは、引き続きPython2ランタイムを含めることができます。ただし、Python2のサポートは時間の経過とともに堅牢性が低下することが予想されます。コンテナ化されたバージョンのPython2をクラウドプラットフォームで実行することはほぼ確実に可能ですが、クラウドサービスプロバイダーが独自のPython2コンテナを維持し続けるという保証はありません。

Python 2アプリケーションで立ち往生している場合、Python 2サポートの欠如にどのように対処する必要がありますか?長期的に行う最善の方法は、Python 2への依存関係をすべて削除する戦略を見つけることです。しかし、それは多くのオプションの最初のものにすぎません。 

Python2からの移行

コードベースのサイズと外部の依存関係によっては、Python2をPython3に残す方が予想よりも簡単な場合があります。Pythonの公式ドキュメントには、プロジェクトが「将来にわたって利用できる」かどうか、つまり、ほとんどまたはまったく調整せずにPython3で使用できるかどうかを判断するための簡単な手順がいくつかあります。実行できる最善の最初のステップの1つは、caniusepython3パッケージを使用して 、移行をブロックするコンポーネントまたは依存関係がある場合はそれを特定することです。

アプリケーションの特定のコンポーネントがPython2でのみ機能するために、Python 2で立ち往生している場合は、そのコンポーネントから移行することから始めます。Python 3と互換性のある代替手段が存在するかどうかを確認し、その時点からアプリケーションを再構築します。アイデアは、Python 2への依存関係が存在する最小の場所を探し、それらに対処することです。

非常に少なくとも、あなたが何らかの形でのPython 2に留まらなければならない場合は行うことができ、そのPythonの3の出発点として、この書き込みと使用のとしてPython 2 - Pythonの2.7.16の最新バージョンに移行することにより開始されます。そうすれば、Python2.7が正式に終了する前に利用できるバグ修正の恩恵を受けることができます。

代替のPython2ランタイムを使用する

Python 2コードベースを変更することが実行可能な提案ではない場合、別の代替手段は、サードパーティによって開発された別のPython2ランタイムを使用することです。代替のPython2ランタイムは、Python2自体よりもサポートウィンドウが長くなる場合があります。

タウトン

プロジェクトのREADMEによると、TauthonはPython 2.7.18のフォークであり、「Python 3.xからバックポートされた新しい構文、組み込み、およびライブラリを備えています」。Tauthonには、メンテナが提供できる場合はいつでも、言語の修正とパッチが含まれています。理論的には、TauthonはPython2.7のドロップイン代替として機能するはずです。この記事の執筆時点での最新リリースであるTauthon2.8.2には、関数アノテーション、キーワードのみの引数、async/await構文、および以前はPython3でのみ使用可能だったその他の機能が含まれています。

PyPy

Pythonのジャストインタイム加速ランタイムであるPyPyは、Python 2を独自の内部インフラストラクチャの重要な部分として使用し、Python2をメインバージョンとして長い間サポートしてきました。プロジェクトのドキュメントには、「RPython [PyPyの基盤]はPython2の上に構築されており、変更される可能性は非常に低いため、PyPyのPython 2バージョンは「永遠に」存在します。つまり、PyPy自体が周り。」PyPyの開発チームはこれらの問題を解決するために絶えず取り組んでいますが、PyPyはC拡張機能に依存する一部のPythonパッケージとの互換性またはパフォーマンスの問題を引き起こす可能性があります。

IronPython

.NetランタイムのPython実装であるIronPythonには、引き続きアクティブなサポートを受けているPython2バージョンがあります。現在の開発者名簿は、2020年以降はPython 2をサポートする可能性が低く、IronPython3に集中する方がよいと宣言しています。しかし、それは他の誰かが自分でそのようなサポートを続けることができなかったという意味ではありません。

Cython

別の可能性は、サポートのウィンドウも限られていますが、Cythonです。Cythonは、パフォーマンスを向上させるためにオプションのタイピングを使用してPythonをCにコンパイルし、Python2を最初からサポートしてきました。Cythonを使用してPython2コードをCに変換し、「凍結」バイナリとして継続して使用することができます。アプリケーションの性質によっては、そうすることでパフォーマンスが向上する場合もあります。(主にI / Oバウンドのプログラムでは、あまり改善されません。)

ただし、Cythonは年末までにPython2のサポートを終了する予定です。これは、Pythonの2の構文を使用してCythonコードをコンパイルする必要があるだろうことだけが、Pythonの2つのプログラムはもうCythonにコンパイルされませんことを意味するわけではないのPython 3を使用しました。 

ベンダーから拡張Python2サポートを購入する

長期的な解決策の1つは、Pythonソリューションのベンダーからサポートを受けることです。ActivePythonディストリビューションとKomodoIDEの作成者であるActiveStateは、Python 2を使い続けたい、またはPython 3で書き直す必要のあるPythonスタックの部分を特定することで、Python3に移行したいお客様に商用サポートを提供します。

一部のベンダーは、サポートされている別の製品での存在の一部としてPython2のサポートを提供しています。Red Hat EnterpriseLinuxバージョン6および7にはPython2が含まれているため、これらのバージョンのOSについてRed Hatから購入したサポート契約には、製品のサポート期間を通じてPython2の継続的なサポートが含まれます。

クラウドサービスとしてPython2を使用している場合、サービスが独自の方法でPython2を引き続きサポートする可能性があります。たとえば、AWSは、2020年12月31日までPython 2.7ランタイムのセキュリティパッチを提供すると述べていますが、これはサードパーティのPython2.7パッケージには適用されません。

3番目のオプションは、コンサルティング会社または請負業者からサポートを購入することです。彼らがあなたに与えるサポートのレベルはあなたのニーズと野心に応じて異なります。Python 2から移行するための移行計画を立てて、依存するソフトウェアを書き直す(おそらく最良の長期戦略)か、Python 2のパッチをランタイムのカスタムビルドに手動でマージする(野心的で複雑な)ことで構成できます。 )。

Python2を自分で保守する

Pythonはオープンソースプロジェクトです。必要な修正を自分で実装することを妨げるものは何もありません。修正がPythonの標準ライブラリへの変更である場合、Python標準ライブラリのほとんどはそれ自体がPythonで記述されているため、通常はそれほど難しくありません。ただし、標準ライブラリでPythonが使用するCモジュール、またはCPythonインタープリターに変更を加える必要がある場合は、さらに困難になります。これを実現するには、Cを理解し、CPythonの内部に精通している必要があります。

何もしない

壊れていない場合は、修正しないでください。これは、多くの企業がWindowsNTおよびWindows2000でこれらのオペレーティングシステムがサポートを終了したときに使用した戦略です。内部使用のみを目的とし、パブリックインターネットに公開されていないPythonアプリケーションは、理論的には無期限に実行できます。

仮想マシンとコンテナ化は、これらの種類のアプリケーションを制御された環境で存続させ、適切に維持する方法を提供します。Python 2ランタイムの特定のエディションを、その標準ライブラリ、アプリに必要なモジュール、およびアプリケーション自体とともに、コンテナーイメージまたはVMに「フリーズ」することができます。

とはいえ、外部に公開されていないレガシーアプリも、定期的に再評価する必要があります。いずれの場合も、Python 2ユーザーにとって最善の長期戦略は、Python 3に移行することです。Python2は、これまでと同じように、過去に移行するものです。

Pythonについてもっと読む

  • Pythonとは何ですか?強力で直感的なプログラミング
  • PyPyとは何ですか?痛みのない高速Python
  • Cythonとは何ですか?Cの速度でのPython
  • Cythonチュートリアル:Pythonを高速化する方法
  • Pythonをスマートにインストールする方法
  • Python3.8の最高の新機能
  • PoetryによるPythonプロジェクト管理の改善
  • Virtualenvとvenv:Python仮想環境の説明
  • Pythonvirtualenvとvenvはすべきこととすべきでないこと
  • Pythonのスレッド化とサブプロセスの説明
  • Pythonデバッガーの使用方法
  • timeitを使用してPythonコードをプロファイリングする方法
  • cProfileを使用してPythonコードをプロファイリングする方法
  • Pythonで非同期を始めましょう
  • Pythonでasyncioを使用する方法
  • PythonをJavaScriptに変換する方法(そしてまた元に戻す方法)
  • Python 2 EOL:Python2の終わりを乗り切る方法
  • プログラミングのニーズごとに12個のPython
  • すべてのPython開発者向けの24のPythonライブラリ
  • あなたが見逃したかもしれない7つの甘いPythonIDE
  • Pythonの3つの主な欠点とその解決策
  • 13のPythonWebフレームワークを比較
  • バグを粉砕するための4つのPythonテストフレームワーク
  • 見逃したくない6つの優れたPython機能
  • 機械学習をマスターするための5つのPythonディストリビューション
  • 自然言語処理のための8つの優れたPythonライブラリ