Python 2とPython 3のデュアル開発 質問する

Python 2とPython 3のデュアル開発 質問する

私はちょうど新しい Python プロジェクトを開始したばかりで、理想的には開発オーバーヘッドを最小限に抑えながら、最初から Python 2 と 3 のサポートを提供したいと思っています。私の質問は、まったく新しいプロジェクトでこれを実現する最善の方法は何ですか?

インストールスクリプトの一部として2to3や3to2を実行するプロジェクトに出会ったことがあります。これは非常に一般的な方法のようです。しかし、これを行うにはいくつかの異なる方法があるようです。また、配布する

また、多言語の Python 2/Python 3 コードを記述するという選択肢もあります。これはひどい考えのように思えますが、私は最近、Python 2 として実行しているにもかかわらず、Python 3 コードとしてより慣用的なコードを書く傾向があることに気付きました。これは、最終的にその日が来たときに私自身の移行に役立つだけで、デュアル サポートを提供したり、少なくとも支援したりするのにはそれほど役立たないような気がします。

私が見たデュアル サポートを提供するプロジェクトのほとんどは、Python 3 サポートを後から追加したので、白紙の状態から始められるという利点がある新しいプロジェクトに適した、より良い方法があるかどうか、特に興味があります。

ありがとう!

ベストアンサー1

私の経験では、プロジェクトの種類によって異なります。

ライブラリまたは非常に自己完結的なアプリケーションの場合、一般的な選択肢は、Python 3.x で非推奨になった構造を可能な限り回避して Python 2.7 で開発し、自動テストを利用して、py2to3 によって残された穴を特定し、手動で修正する必要があることです。

一方、実際のアプリケーションでは、py3k にまだ移植されていないライブラリ (重要なライブラリの場合もあります) に頻繁に遭遇する可能性があることを覚悟してください。ほとんどの場合、ライブラリを Python 3 に移植する以外に選択肢がないため、余裕があれば移植してください。通常はそれができません。そのため、この種のプロジェクトでは Python 3 をサポートしていません (ただし、適切なタイミングで移植しやすいコードを書くように努力しています)。

ユニコード処理については、これを見つけましたPyCon 2012 ビデオ非常に参考になります。このアドバイスはPython 2.xと3.xの両方に有効です。外部から来るすべての文字列をバイトとして扱い、できるだけ早くUnicodeに変換し、文字列をバイトに変換して出力するのはできるだけ遅くしてください。これに関する非常に参考になるビデオが他にもあります。日付/時刻の処理

[アップデート]

これは古い答えです。現在(2019年)の時点では、Python 2.xを使用してプロジェクトを開始する正当な根拠はなく、古いプロジェクトをPython 3.7以降に移植し、Python 2.xのサポートを放棄する説得力のある理由がいくつかあります。

おすすめ記事