Python 3.6.1がAttributeErrorをスローする理由:モジュール 'enum'に属性 'IntFlag'がないのはなぜですか?


119

MacOS XにPython 3.6.1をインストールしました

コンソールを実行しようとすると(またはPython3で何かを実行しようとすると)、次のエラーがスローされます。

  AttributeError: module 'enum' has no attribute 'IntFlag'

$ /Library/Frameworks/Python.framework/Versions/3.6/bin/python3  
Failed to import the site module  
Traceback (most recent call last):  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 544, in <module>  
    main()  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 530, in main  
    known_paths = addusersitepackages(known_paths)  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 282, in addusersitepackages  
    user_site = getusersitepackages()  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 258, in getusersitepackages  
    user_base = getuserbase() # this will also set USER_BASE  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site.py", line 248, in getuserbase  
    USER_BASE = get_config_var('userbase')  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/sysconfig.py", line 601, in get_config_var  
    return get_config_vars().get(name)  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/sysconfig.py", line 580, in get_config_vars  
    import _osx_support  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/_osx_support.py", line 4, in <module>  
    import re  
  File "/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/re.py", line 142, in <module>  
    class RegexFlag(enum.IntFlag):  
AttributeError: module 'enum' has no attribute 'IntFlag'  

クラスIntFlagはenum.py内に存在します。では、なぜAttributeErrorがスローされるのですか?


8
enum.py万が一、作業ディレクトリにファイル名はありますか?
juanpa.arrivillaga 2017年


2
...それは私が尋ねたことではありません。名前のファイルがあった*場合、私は尋ねたenum.pyあなたに作業ディレクトリが
juanpa.arrivillaga

4
実際、そうでした。「シェル構成ファイルのどこにもPYTHONPATHがPython 2.7のインストールをポイントするように設定されていないことを確認してください。」これが原因である可能性が非常に高いようです。
juanpa.arrivillaga 2017年

2
-Iサイトパッケージと環境変数を無視するオプション、または-vインポートに関する詳細メッセージを表示するオプションを使用してインタープリターを実行してみてください
Ceppo93

回答:


230

それenumはあなたが標準ライブラリenumモジュールではないからです。おそらくパッケージがenum34インストールされています。

これが当てはまるかどうかを確認する1つの方法は、プロパティを検査することです enum.__file__

import enum
print(enum.__file__)  
# standard library location should be something like 
# /usr/local/lib/python3.6/enum.py

Python 3.6以降、enum34ライブラリは標準ライブラリと互換性がなくなりました。ライブラリも不要なので、アンインストールするだけです。

pip uninstall -y enum34

<= 3.4と> 3.4の両方のPythonバージョンで実行するコードが必要な場合はenum-compat、要件として試すことができます。enum34標準ライブラリenumのない古いバージョンのpython にのみインストールされます。


これは殺しipython2 --> traitlets --> enum34ます。(残念ながら、enum34インストールされて.../2.7/site-packages/enumいません.../2.7/site-packages/enum34-問題を求めています。)
denis 2017

1
はい、あなたは正しいです-それは両方を使用しようとする人への単なるメモです。
denis

9
私の場合、それは私に与えましたSkipping enum34 as it is not installed..私は3.7を使用しています
Rotkiv

1
どのような場合は、print(enum.__file__)私にこれを与えます:/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/enum.py。それは私が標準enum ライブラリを持っているのではなく、持っているということenum34ですか?編集:ええ、pip uninstall enum34私にくれたSkipping enum34 as it is not installed.
Andrey

1
@HåkenLidちなみにこれを開こうとすると、これが起こりjupyter notebookます。
シンシアGS

89

まだこの問題が発生しているかどうかはわかりません。同様の問題があり、設定を解除するだけで解決できましたPYTHONPATH

$ unset PYTHONPATH


2
PyCharmユーザー向けの参考までに、クリックしたPYTHONPATHの設定を解除します Settings->Build, Execution, Deployment->Console->Python Console。次に、というタイトルのフィールドからPYTHONPATH変数を削除しましたEnvironment variables。注:この記事の執筆時点では、PyCharm 2017.1.2を使用していました。
MikeyE 2017

これは機能しますが、Python 2ライブラリを含むパスの組み合わせがなければ、機能させることができます。理由を知りたいです。
Ulf Aslak、2018

はい、Windowsでcmdプロンプトを再起動しました。動作しました。おそらく間接的にPYTHONPATHをリセットしました
Karan Kaw

12

私にとって、このエラーは、pycharmに統合するためにgcloudコンポーネントapp-engine-pythonのインストール後に発生しました。pycharmがapp-engineにアップロードされなくなった場合でも、モジュールのアンインストールが役立ちました。


4
PyCharmでFlaskを実行しているときにこのエラーが発生し、プロジェクトからAppEngineサポートを無効にすることで修正しました(設定->言語とフレームワーク-> Google App Engine)。Python3の第2世代ランタイムはApp Engine開発サーバーを使用しないため、これは理にかなっています(Python 2.xの場合)。
ブレット

9

PyCharmでGoogle App EngineのPython 3.7スタンダード環境プロジェクトを実行中にこのエラーが発生したために誰かがここに来た場合、あなたがする必要があるのは

  • 実行する構成がFlask用であり、Google App Engineの構成ではないことを確認してください。
  • 次に、[設定] >> [言語とフレームワーク] >> [Google App Engine]でGoogle App Engineサポートを無効にします

その理由は、このリンクのとおりです

全体的な目標は、アプリを完全に移植可能にし、標準のPython環境で実行できるようにすることです。App Engine Pythonアプリではなく、標準のPythonアプリを作成します。この移行の一環として、アプリのコア機能に専用のApp Engine APIとサービスを使用する必要がなくなりました。現在、App Engine APIはPython 3.7ランタイムでは使用できません。

PyCharmでpython 3.7プロジェクトをGoogleアプリエンジンプロジェクトとして作成すると、python2.7アプリの場合と同じように試行されます


それで、PycharmからGoogle App Engineに書き込む場合、手動でコードをクラウドにアップロードする必要がありますか、それともPycharmは引き続きApp Engineにアップロードできますか?
ベン

@Ben手動でクラウド(Google App Engine)にコードをアップロードすることの意味がわかりません。App Engineへのデプロイについて言及している場合は、コマンドを使用しgcloud app deployます。それはpycharmとは何の関係もありません。
ジョセフアブラハム

私はこれは素人ですが、PycharmでApp Engineサポートを有効にすると、メニューコマンドを使用してコードをデプロイできるようになると思いました。ただし、PycharmでApp Engineサポートを無効にする場合(つまり、Python 3.7を使用する場合)、コマンドラインに移動してコードをデプロイする必要があります。その権利はあるのですか、それとも2.7でApp Engineの機能がどのように機能していたのかを誤って解釈しましたか?
Ben

@ベンこれは、PycharmアプリエンジンサポートツールがPython 2.7を対象としているためです。私の回答で述べたように、GoogleではPython 3.7 Standard App Engineアプリを標準のPythonアプリと見なしています。そして、これがPycharmがPython 3.7アプリエンジンアプリに対してこのように動作する理由であると私は信じています。
ジョセフアブラハム

8

免責事項どうぞ、@ juanpa.arrivillaga、この回答が表示された場合は、自由に独自に書いてください。私はこの投稿を削除します。

@ juanpa.arrivillaga は前述のとおりです。

万が一、作業ディレクトリにenum.pyというファイル名がありますか?

これは私が遭遇した問題でした。当時、Pythonのenumモジュールに気づかず、テストファイルに名前を付けていましたenum.py

ファイル名モジュール名なので、矛盾がありました。モジュールの詳細はこちら:https : //docs.python.org/2/tutorial/modules.html


あなたは私の命を救った。
ガストン

6

pycharm設定で「Google App Engineサポート」を無効にすると、この問題が修正されました。

pycharmアプリエンジンの設定


私のために働く。私はPyCharmからデバッグモードでフラスコを実行している同じ問題を持っていた
カン華

これは私にとってはうまくいきます。なぜなら、実際にはgoogle sdkはpython2を使用しているからです。...
ホセ3

3

HåkenLidの回答は私の問題の解決に役立ちました(ありがとう!)、私の場合、DockerコンテナーでFlaskを実行しているPython3.7に存在します(FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7)。

私の場合、enum34別のライブラリ(pip install smartsheet-python-sdk)によってインストールされていました。同様のDockerコンテナの問題を抱えている人のために、私の最終的なDockerfileを以下に示します(関連する行に削除されています)。

FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
...
RUN pip install -r requirements.txt
RUN pip uninstall -y enum34
...

2

python2とpython3の両方のPYTHONPATHを保持する必要がある場合は、エイリアスステートメントを記述して、bash_profileに適切なPYTHONPATHを設定できます。

〜/ .bash_profileのPYTHONPATH2およびPYTHONPATH3変数をハードコードし、その末尾に次のエイリアスを追加します。

alias python='export PYTHONPATH=${PYTHONPATH2};python'
alias python3='export PYTHONPATH=${PYTHONPATH3};python3'

python(python2を参照)は、python2をより頻繁に使用するため。


この提案は機能しません。それでも同じエラーが発生します。
デレク

2

いつでもこの問題が発生しました:

AttributeError:モジュール 'enum'に属性 'IntFlag'がありません

単に最初にコマンドを実行します:

unset PYTHONPATH 

次に、目的のコマンドを実行すると、成功しました。


1
これは、私の場合、PYTHONPATHが古いバージョンのpythonに属するものを指している必要があるためです。それは働いていた
ニッシュ

私の場合、古いVENV。ヒントのThx :)
Janusz Skonieczny

2

私が使っていたpip install <required-library> --ignore-installed enum34
あなたの必要なライブラリがインストールされると、ビルド時の警告の外観を。私はこのようなエラーを受け取りました:
Using legacy setup.py install for future, since package 'wheel' is not installed
ERROR: pyejabberd 0.2.11 has requirement enum34==1.1.2, but you'll have enum34 1.1.10 which is incompatible.

この問題を修正するには、次のコマンドを実行しますpip freeze | grep enum34。これにより、インストールされているenum34のバージョンがわかります。次に、それをアンpip uninstall enum34インストールし、必要なバージョンを次のように再インストールします。
pip install "enum34==1.1.20"


1

コンピューターにPython 2とPython 3がインストールされています。奇妙な理由で、reモジュールが呼び出されたときに、Python 3のsys.pathにPython2のsitepackageライブラリディレクトリへのパスも含まれています。Python 3を実行してenumをインポートした場合print(enum.__file__)、システムはこのPython 2パスをサイトパッケージに表示しません。したがって、非常にラフでダーティーなハックは、列挙型がインポートされるモジュールを直接変更し(トレースバックパスをたどる)、列挙型をインポートする直前に次のコードを挿入することです。

import sys
for i, p in enumerate(sys.path):
    if "python27" in p.lower() or "python2.7" in p.lower(): sys.path.pop(i)
import enum

それで問題は解決しました。


1

enum34のバージョン1.1.8をインストールするとうまくいきました。

enum34 = "== 1.1.8"をpyproject.tomlに追加することでこれを修正できました。どうやらenum34にはv1.1.8でこのエラーを回避する機能がありましたが、これはv1.1.9以降で低下しました。ただし、これは回避策です。より良い解決策は、パッケージが環境マーカーを使用するため、必要がない限りenum34をインストールする必要がないことです。

ソース:https : //github.com/python-poetry/poetry/issues/1122


1
この解決策は私にとってうまくいった
Ajith

0

python -m grpc_tools.protoc --versionの実行中にこの問題が発生した場合でも、PYTHONPATHをsite-packagesまで設定し、すべてのコマンドプロンプトウィンドウをシャットダウンすると、機能しました。gRPCユーザーに役立つことを願っています。


0

この問題は、python3.8とtensorflow 2.2.0を使用する仮想環境カーネルのjupyterlabのubuntu20.04で発生しました。エラーメッセージは

 Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel_launcher.py", line 15, in <module>
    from ipykernel import kernelapp as app
  File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel/__init__.py", line 2, in <module>
    from .connect import *
  File "/home/hu-mka/.local/lib/python2.7/site-packages/ipykernel/connect.py", line 13, in <module>
    from IPython.core.profiledir import ProfileDir
  File "/home/hu-mka/.local/lib/python2.7/site-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/home/hu-mka/.local/lib/python2.7/site-packages/IPython/core/application.py", line 23, in <module>
    from traitlets.config.application import Application, catch_config_error
  File "/home/hu-mka/.local/lib/python2.7/site-packages/traitlets/__init__.py", line 1, in <module>
    from .traitlets import *
  File "/home/hu-mka/.local/lib/python2.7/site-packages/traitlets/traitlets.py", line 49, in <module>
    import enum
ImportError: No module named enum

問題は、/ usr / bin / pythonのシンボリックリンクでpython2を指していることでした。解決:

cd /usr/bin/
sudo ln -sf python3 python

私はpython2がすぐに死ぬことを願っています!マーカス・テルベイシン


このソリューションは、システムでひどい混乱を引き起こす可能性があります。システム全体のデフォルトのpythonを変更する代わりに、virtualenvを使用する必要があります。
Alex Baranowski

ご指摘いただきありがとうございます。私はまだ問題に気づいていません(しかし、私は常にpython2をできるだけ避けています)。Python2愛好家は間違いなくこれを行わないでください。
Markus Kaukonen

0

テストを実行するときにこの問題が発生する場合は、構成で2番目のボックスオフになってPyCharmいることを確認してください


-2

virtualenvのからJupyterカーネルを実行しようとしたとき、誰もがこの問題を持っている場合は、単に正しいを追加するPYTHONPATHにはkernel.json、あなたのvirtualenvのカーネル(例ではPythonの3)の:

{
 "argv": [
  "/usr/local/Cellar/python/3.6.5/bin/python3.6",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "Python 3 (TensorFlow)",
 "language": "python",
 "env": {
     "PYTHONPATH":     "/Users/dimitrijer/git/mlai/.venv/lib/python3.6:/Users/dimitrijer/git/mlai/.venv/lib/python3.6/lib-dynload:/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6:/Users/dimitrijer/git/mlai/.venv/lib/python3.6/site-packages"
}
}

ユーザーディレクトリはここにハードコードされています。このソリューションは初心者には機能しません。それが何をしていて、関連するファイルを見つける場所を説明してください。
トム・ケリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.