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

2025-01-06 08:32:00
admin
原创
115
摘要:问题描述:我刚刚为 MacOS X 安装了 Python 3.6.1当我尝试运行控制台(或使用 Python3 运行任何内容)时,会引发此错误: AttributeError: module 'enum' has no attribute 'IntFlag' $ /Library/Frameworks/P...

问题描述:

我刚刚为 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'  

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


解决方案 1:

这是因为你的enum不是标准库enum模块。你可能已经安装了该包enum34

检查是否属于这种情况的一种方法是检查房产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

如果您需要代码在 Python 版本 <=3.4 和 >3.4 上运行,您可以尝试将其enum-compat作为要求。它仅适用enum34于没有标准库枚举的旧版本 Python。

解决方案 2:

不确定您是否还遇到此问题。我遇到过类似的问题,只需取消设置即可解决PYTHONPATH

$ unset PYTHONPATH

解决方案 3:

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

解决方案 4:

我在安装transformersHuggingFace 的库时遇到了这个问题。这是因为enum34我的环境中安装的包覆盖了 Python 中的内置枚举。这个包可能是出于向前兼容的目的而安装的,而 Python 3.6+ 不再需要它。所以解决方案很简单,

pip uninstall -y enum34

解决方案 5:

如果有人因为在 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 和服务来实现应用的核心功能。目前,App Engine API 在 Python 3.7 运行时中不可用。

我想当我们在 PyCharm 中创建一个 python 3.7 项目作为 Google 应用引擎项目时,它仍然会尝试以与 python2.7 应用程序相同的方式执行

解决方案 6:

安装 enum34 1.1.8 版本对我有用。

我能够通过在 pyproject.toml 中添加 enum34 = "==1.1.8" 来修复此问题。显然 enum34 在 v1.1.8 中有一个功能可以避免此错误,但这在 v1.1.9+ 中又出现了。不过这只是一种解决方法。更好的解决方案是让包使用环境标记,这样除非需要,否则您根本不需要安装 enum34。

来源:https://github.com/python-poetry/poetry/issues/1122

解决方案 7:

@juanpa.arrivillaga上面提到过:

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

这是我遇到的问题。我当时不知道 Python 上的枚举模块,并将我的测试文件命名为enum.py

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

解决方案 8:

在 pycharm 偏好设置中禁用“Google App Engine 支持”可以为我解决此问题。

pycharm 应用引擎首选项

解决方案 9:

Håken Lid 的回答帮助解决了我的问题(谢谢!),在我的情况下,Python3.7 在 Docker 容器中运行 Flask(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
...

解决方案 10:

每当我遇到这个问题时:

AttributeError:模块“enum”没有属性“IntFlag”

首先我运行命令:

unset PYTHONPATH 

然后运行我想要的命令然后就成功了。

解决方案 11:

如果您必须保留 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。

解决方案 12:

我的电脑上安装了 Python 2 和 Python 3。出于某种奇怪的原因,当调用 re 模块时,Python 3 的 sys.path 中还有一个 Python2 的 sitepackage 库目录的路径。如果我运行 Python 3 并导入 enum,print(enum.__file__)系统不会显示此 Python 2 路径到 site-packages。因此,一个非常粗暴和肮脏的黑客方法是直接修改导入 enum 的模块(遵循回溯路径)并在导入 enum 之前插入以下代码:

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

这解决了我的问题。

解决方案 13:

我通过使用“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"

解决方案 14:

如果在运行测试时遇到此问题PyCharm,请确保配置中的第二个框未被选中。

IT科技

解决方案 15:

2022 年更新

如果您使用的是现代版本的 Python(在我的情况下是 3.9.x),那么您根本不需要“enum34”,因为这个库被描述为“Python 3.4 Enum 反向移植到 3.3、3.2、3.1、2.7、2.6、2.5 和 2.4”

所以对我来说,解决方案是完全摆脱它:

pip uninstall enum34

现在 Pycharm 可以完美运行我的应用程序。

解决方案 16:

我在虚拟环境内核为 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

希望 Python 2 的使用率能很快彻底下降。

解决方案 17:

甚至我在运行 python -m grpc_tools.protoc --version 时也遇到了这个问题,必须将 PYTHONPATH 设置为 site-packages 并关闭所有命令提示符窗口,它才能正常工作。希望它能帮助 gRPC 用户。

解决方案 18:

不幸的是,这些建议都对我没什么帮助,但在谷歌搜索之后

pip install aenum

帮我解决了

解决方案 19:

我遇到了同样的问题,但我无法更改脚本运行的环境。所以这里的修复对我来说不适用。

我所做的是

import os
import sys
os.environ["PYTHONPATH"] = os.pathsep.join(
    (p for p in os.environ["PYTHONPATH"].split(os.pathsep) if "python2" not in p)
)
sys.path = [p for p in sys.path if "python2" not in p]

# Now that the paths are clean, we can import re
import re

解决方案 20:

我的问题是,我在 pycharm 中将我的一个目录标记为 a ,Test Sources Root这导致 python包在其中ast查找(它是空的)。我通过单击抛出的行,然后将 (mac ) 控制到包中,发现它转到了标记目录的文件,从而找到了这个问题。enum`<my_test_src_root_dir>/__init__.pyCMD-Benum`__init__.py

引发的文件:

“ /opt/homebrew/Cellar/python@3.10/3.10.2/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ast.py ”

抛出的行:

from enum import IntEnum, auto

错误:

ImportError:无法从“enum”导入名称“IntEnum”(.../path/to/_ init _.py)

解决方案 21:

如果有人在尝试从虚拟环境运行 Jupyter 内核时遇到此问题,只需将正确的内容添加PYTHONPATHkernel.json虚拟环境内核(示例中为 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"
}
}

解决方案 22:

确保代码库中没有名为 enum 的文件或文件夹

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用