2

私は、さまざまなセットアップ/ティアダウンの状況を構成するためのクリーンな方法として、多くのコンテキスト マネージャーを使用してきました。私のデプロイメントは Python 2.6 を対象としているため、これはcontextlib.nested.

最近、同じコード ベースで Python 2.x と Python 3 の両方をサポートすることに関心があります。これは一部のプロジェクトでは可能でしたが、コンテキスト マネージャーの場合は次の理由で問題が発生しています。

  1. contextlib.nestedPython 3 ではサポートされていません
  2. Python-3 スタイルのネストされたコンテキスト マネージャー (例: with aa() as a, bb() as b: ...) は、2.6 ではサポートされていません。

ここには、基本的な構文上の非互換性があります。私の手に負えないさまざまな理由により、現時点では 2.7 を製品化するのは難しいかもしれませんが、コードを可能な限り将来的に保証したいと考えているため、Python 3 に関心があります。

2.6 と 3.x の同じコード ベースでネストされたコンテキスト マネージャーをサポートするための回避策を提案できる人はいますか? それとも、これは失われた原因ですか?

4

4 に答える 4

2

nested言及された Veedracの癖が問題にならない場合は、Python 標準ライブラリからコードをコピーするだけで済みます。

それらが気になる場合は、手動でネストするか、Python 2.6 のサポートをやめるしかありません。このために 2 つのコードベースを使用するか、1 つを使用するかは問題ではありません。この場合、Python 2.6 で機能する唯一の方法は、それらをネストすることです。ネストされていない 2.7 コードをネストされた 2.6 コードに変換するカスタム 2to3 フィクサーを作成してみてください。しかし正直なところ、2.6 のサポートをやめるまでは、ネストされたマネージャーで単一のコードベースを使用する方が苦痛ではありません。

于 2013-10-01T21:42:05.373 に答える
1

いつでもnested自分で再実装してcompatibility.py、プロジェクト内のファイルに保存できます。これは、多くの場合、クロス バージョンに対して行われます。

編集: @JBernardo がこのソリューションについてコメントで既に言及していることがわかります。

于 2013-10-01T21:39:23.653 に答える