为什么Python 3.6.1抛出AttributeError:模块'enum'没有属性'IntFlag'?

Bry*_*ock 72 python-3.x

我刚为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'  
Run Code Online (Sandbox Code Playgroud)

IntFlag类存在于enum.py中.那么,为什么抛出AttributeError?

Håk*_*Lid 136

这是因为您enum不是标准的库enum模块.您可能已enum34安装该软件包.

检查是否属于这种情况的一种方法是检查财产 enum.__file__

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

从python 3.6开始,enum34库不再与标准库兼容.该库也是不必要的,因此您只需卸载它即可.

pip uninstall -y enum34
Run Code Online (Sandbox Code Playgroud)

如果您需要在<= 3.4和> 3.4的python版本上运行代码,您可以尝试将其enum-compat作为一项要求.它只安装enum34旧版本的python而没有标准库枚举.

  • 在我的情况下,它给了我'跳过enum34因为它没有安装'..我正在使用3.7 (4认同)
  • @Rotkiv 解决方案是什么。我也在使用 3.7 并面临同样的问题。 (2认同)
  • @HåkenLid 顺便说一句,当我尝试打开“jupyter notebook”时会发生这种情况。 (2认同)

小智 79

不确定你是否还有这个问题.我有一个类似的问题,我只能通过取消设置解决它PYTHONPATH

$ unset PYTHONPATH

  • 仅供 PyCharm 用户使用,要取消设置 PYTHONPATH,我单击了“设置-&gt;构建、执行、部署-&gt;控制台-&gt;Python 控制台”。然后我从名为“环境变量”的字段中删除了 PYTHONPATH 变量。注意:在撰写本文时,我使用的是 PyCharm 2017.1.2。 (2认同)
  • 我至少每周都会回来查看一次 - 有人可以解释*为什么*这有效吗? (2认同)

mic*_*ckk 10

对我来说,此错误是在安装gcloud组件app-engine-python以便集成到pycharm后发生的。即使pycharm现在不上传到app-engine,卸载模块也有帮助。

  • 我在PyCharm下运行Flask时遇到此错误,并通过从项目(首选项-&gt;语言和框架-&gt; Google App Engine)禁用了AppEngine支持修复了该错误。Python3的第二代运行时不使用App Engine开发服务器,因此这很有意义(适用于Python 2.x)。 (4认同)

Jos*_*lff 8

安装 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

  • 当尝试使用“pyinstaller”时,这个解决方案对我有用。 (2认同)
  • 信息:将 enum34 更新到版本 1.1.8 的命令“pip install enum34==1.1.8” (2认同)

小智 7

如果有人在PyCharm中运行Google App Engine Python 3.7标准环境项目时由于遇到此错误而来这里,那么您要做的就是

  • 确保要运行的配置适用于Flask,而不适用于Google App Engine配置。
  • 然后在偏好设置>>语言和框架>> Google App Engine下禁用Google App Engine支持

原因是根据此链接

总体目标是您的应用程序应具有完全可移植性,并可以在任何标准Python环境中运行。您编写的是标准Python应用程序,而不是App Engine Python应用程序。作为此转变的一部分,您不再需要为应用程序的核心功能使用专有的App Engine API和服务。目前,Python 3.7运行时中不提供App Engine API。

我猜想当我们在PyCharm中将python 3.7项目创建为Google应用引擎项目时,它仍会尝试以与python2.7应用相同的方式进行操作


chm*_*der 7

在 pycharm 首选项中禁用“Google App Engine Support”为我解决了这个问题。

pycharm 应用引擎首选项


dan*_*paz 6

免责声明:请@ juanpa.arrivillaga,如果您看到此答案,请随时写自己的答案,我将删除此帖子。

@ juanpa.arrivillaga 上面已经提到

您的工作目录中是否有文件名enum.py?

这就是我遇到的问题。当时我还不了解python上的enum模块,并已命名测试文件enum.py

由于文件名模块名,因此存在冲突。有关模块的更多信息,请访问:https : //docs.python.org/2/tutorial/modules.html


小智 5

H\xc3\xa5ken Lid 的回答帮助解决了我的问题(谢谢!),在我的例子中,Python3.7 在 Docker 容器中运行 Flask ( FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7)。

\n\n

就我而言,enum34是由另一个库 ( ) 安装的pip install smartsheet-python-sdk。\n对于那些遇到类似 Docker 容器问题的人,这是我的最终 Dockerfile(删除了相关行):

\n\n
FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7\n...\nRUN pip install -r requirements.txt\nRUN pip uninstall -y enum34\n...\n
Run Code Online (Sandbox Code Playgroud)\n


Shi*_*hah 5

我在transformers从 HuggingFace安装库时遇到了这个问题。这是因为enum34我的环境中安装了包,它覆盖了 Python 中的内置枚举。这个包可能是由某些东西安装的,因为 Python 3.6+ 不再需要向前兼容性。所以解决办法很简单,

pip uninstall -y enum34
Run Code Online (Sandbox Code Playgroud)