Python 2.7 および Python 3.3 と互換性のあるパッケージを作成したいと考えています。ロジックは一度だけ存在する必要があります。
Python 2.7 または Python 3.3 では、通常、プログラミング ロジックをどのように表現しますか? それとも別の道を選びますか?
編集:この問題はコアでどのように処理されますか?
Python 2.7 および Python 3.3 と互換性のあるパッケージを作成したいと考えています。ロジックは一度だけ存在する必要があります。
Python 2.7 または Python 3.3 では、通常、プログラミング ロジックをどのように表現しますか? それとも別の道を選びますか?
編集:この問題はコアでどのように処理されますか?
同じ言語のビットのみを使用し、他の部分で条件または例外処理を行うことによって、非常に単純にそれを行います。
これは、ソフトウェアの機能や、サポートする必要がある Python のバージョンに応じて、難しくも簡単にもなります。Python 2.6、2.7、および 3.3 のみをサポートすることで、比較的単純になります。
SOに関する質問では、正確にどのように行うかは答えられません。
この本をチェックすることをお勧めします: http://python3porting.com/、特に「2to3 変換なしで Python 2 および 3 をサポートする」の章と付録には、ほとんどの非互換性を解決する方法の例がたくさんあります。
sixライブラリも役に立つかもしれません。
私はいくつかの import を使用する傾向があり__future__
(おそらく Python 3 では安全に無視されています)、ときどきtry except
import ステートメントを使用します。さらに、basestring / str
互換性のために stringtype を定義します。モジュールごとに必要なものに応じて。
例えば:
from __future__ import absolute_import
from __future__ import unicode_literals
from __future__ import division
from __future__ import print_function
try:
import ConfigParser as cfgparser
except ImportError:
import configparser as cfgparser
try:
stringtype = basestring
except NameError:
stringtype = str
sixパッケージはすでにこれを行っていると思うので、それは別の良い選択肢かもしれません。