2016-05-02 2 views
5

私はPythonでenumと違った動作をしていました。enumとenum34の両方で生活するには?

intた私は、このために、出力に気付く最初びっくりしました:

>>>import enum 
>>>class Color(enum.Enum): 
     red = 1 

>>>Color.red 
1 

その後、私は代わりにenum34の私はenumがインストールされていたが実現:

$ sudo apt-get install python-enum34 

そして今、結果が異なっています:

>>>Color.red 
<Color.red: 1> 

私の現在のアプリケーションは、value.valueで列挙型の値を取得するタイプenumを受け入れています。もちろん、間違ったenumがインストールされていると、例外が発生します。

どうすればこの問題に対処できますか?

+0

標準ライブラリの 'enum'以外の' enum'モジュールについてお話していますか?標準ライブラリのものが、あなたが見た結果を与えてはいけません。 – user2357112

+0

私は分かりません。私はちょうど 'ipython'の新規インストールを実行し、この例を試しました。私は前の出力を得た。それから私は 'enum34'をインストールしました。私は後者の結果を得ました。 – nowox

+0

Pythonのバージョンによっては、新規インストールでImportErrorまたは望む結果が得られるはずです。あなたは 'enum.Enum'から継承することを覚えていますか?表示したコードスニペットは、実際のインタープリタセッションからコピーペーストされません。 – user2357112

答えて

4

3.4 Enumが入る前に存在していたenumパッケージがあったようです。 enum34はその前のパッケージがすでに存在していたので、その名前が付けられています。

enumenum34の両方が同じ場所にインストールされているため、それらを共存させることは容易ではありません。また、非標準の場所にある列挙型の1つとしてコードを配布するのが難しくなります。

1つの可能性はvirtual envsです。次に、venvのアプリケーションに必要な列挙型をインストールできます。

+0

これは、venvsとあなたはパッケージを制限することができ、プロジェクト間の厄介な衝突について心配する必要はありません。 – wom

関連する問題