为什么 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/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:
我在安装transformers
HuggingFace 的库时遇到了这个问题。这是因为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 支持”可以为我解决此问题。
解决方案 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
,请确保配置中的第二个框未被选中。
解决方案 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-B
enum`__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 内核时遇到此问题,只需将正确的内容添加PYTHONPATH
到kernel.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 的文件或文件夹