我刚为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?
答案 0 :(得分:97)
这是因为您的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 enum34
如果您需要在python版本上运行代码&lt; = 3.4和&gt; 3.4,您可以尝试将enum-compat
作为一项要求。它只为没有标准库枚举的旧版python安装enum34
。
答案 1 :(得分:64)
不确定您是否还有此问题。我遇到了类似的问题,只需取消设置PYTHONPATH
$ unset PYTHONPATH
答案 2 :(得分:5)
免责声明:请,@ juanpa.arrivillaga,如果您看到这个答案,请随时自行编写,我将删除此帖。
@ juanpa.arrivillaga had mentioned above:
工作目录中是否有文件名enum.py?
这是我遇到的问题。我当时并不知道python上的枚举模块,并将我的测试文件命名为enum.py
。
由于文件名是模块名称,因此存在冲突。有关模块的更多信息,请访问:https://docs.python.org/2/tutorial/modules.html
答案 3 :(得分:5)
对我来说,此错误是在安装gcloud组件app-engine-python以便集成到pycharm后发生的。即使pycharm现在没有上传到应用引擎,卸载模块也有帮助。
答案 4 :(得分:5)
安装enum34的1.1.8版本对我有用。
我能够通过向pyproject.toml添加enum34 =“ == 1.1.8”来解决此问题。 显然enum34在v1.1.8中具有避免此错误的功能,但是 这在v1.1.9 +中已退回。不过,这只是一种解决方法。的 更好的解决方案是使程序包使用环境标记,以便 除非需要,您根本不需要安装enum34。
答案 5 :(得分:3)
HåkenLid的回答帮助解决了我的问题(谢谢!),就我而言,这是在Docker容器(FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
中运行Flask的Python3.7中实现的。
对于我来说,enum34
是由另一个库(pip install smartsheet-python-sdk
)安装的。
对于那些遇到类似Docker容器问题的人,这里是 my 最终的Dockerfile(跳至相关行):
FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
...
RUN pip install -r requirements.txt
RUN pip uninstall -y enum34
...
答案 6 :(得分:2)
如果有人在PyCharm中运行google app引擎Python 3.7标准环境项目时由于遇到此错误而来这里,那么您要做的就是
原因符合此link
总体目标是您的应用程序应该是完全可移植的,并且可以在任何标准Python环境中运行。您编写的是标准Python应用程序,而不是App Engine Python应用程序。作为此转变的一部分,您不再需要为应用程序的核心功能使用专有的App Engine API和服务。目前,Python 3.7运行时中不提供App Engine API。
我猜想当我们在PyCharm中创建一个python 3.7项目作为Google应用程序引擎项目时,它仍会尝试以与python2.7应用程序相同的方式进行操作
答案 7 :(得分:2)
我在从 HuggingFace 安装 transformers
库时遇到了这个问题。这是因为包 enum34
安装在我的环境中,它覆盖了 Python 中的内置枚举。这个包可能是由某些东西安装的,因为 Python 3.6+ 不再需要向前兼容性。所以解决办法很简单,
pip uninstall -y enum34
答案 8 :(得分:2)
答案 9 :(得分: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"
答案 10 :(得分: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
那解决了我的问题。
答案 11 :(得分:1)
如果必须同时为python2和python3保留PYTHONPATH,则可以编写别名语句以在bash_profile中设置适当的PYTHONPATH:
在〜/ .bash_profile中对PYTHONPATH2和PYTHONPATH3变量进行硬编码,并在其末尾添加以下别名:
const Set = sequelize.define('Set',
{
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false
}
},
{
tableName: 'sets',
timestamps: true,
underscored: true
}
);
Set.associate = function(models) {
Set.belongsTo(
models.User,
{
as: 'user',
foreignKey: { allowNull: false },
onDelete: 'CASCADE'
}
)
Set.hasMany(
models.Cards,
{
as: 'card',
foreignKey: { allowNull: true },
onDelete: 'CASCADE'
}
)
}
我的alias python='export PYTHONPATH=${PYTHONPATH2};python'
alias python3='export PYTHONPATH=${PYTHONPATH3};python3'
(指python2)是因为我更频繁地使用python2。
答案 12 :(得分:1)
在pycharm首选项中禁用“ Google App Engine支持”为我解决了此问题。
答案 13 :(得分:0)
我遇到了同样的问题,但我无法更改脚本在其中运行的环境。所以这里的修复不适用于我。
我所做的是
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
答案 14 :(得分: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
希望Python 2的使用将很快完全消失。
答案 15 :(得分:0)
即使我在运行python -m grpc_tools.protoc --version时遇到此问题 必须设置PYTHONPATH直到站点包并关闭所有命令提示符窗口,然后它才能工作。希望它对gRPC用户有所帮助。
答案 16 :(得分:-1)
答案 17 :(得分:-1)
每当我遇到这个问题:
AttributeError:模块'enum'没有属性'IntFlag'
首先我运行命令:
unset PYTHONPATH
然后运行我想要的命令,然后成功完成了。
答案 18 :(得分:-2)
如果在尝试从virtualenv运行Jupyter内核时遇到此问题,只需将正确的kernel.json
添加到virtualenv内核的{
"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"
}
}
(示例中为Python 3):
df["C"] = df["A"].cumsum()