Почему Python 3.6.1 выдает AttributeError: модуль enum не имеет атрибута IntFlag?

Я только что установил Python 3.6.1 для MacOS X

Когда я пытаюсь запустить консоль (или запускать что-нибудь с 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?


person BryanWheelock    schedule 30.03.2017    source источник
comment
Есть ли случайно имя файла enum.py в вашем рабочем каталоге?   -  person juanpa.arrivillaga    schedule 30.03.2017
comment
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6 находится в $ PATH   -  person BryanWheelock    schedule 30.03.2017
comment
... я не об этом спрашивал. Я спросил, есть ли * в вашем рабочем каталоге файл с именем enum.py   -  person juanpa.arrivillaga    schedule 30.03.2017
comment
Нет. В моем корневом каталоге нет файла с именем enum.py.   -  person BryanWheelock    schedule 30.03.2017
comment
Вы уверены? Каков результат print(os.listdir(os.getcwd())) Что именно вы пытаетесь запустить? Вы запускаете сценарий?   -  person juanpa.arrivillaga    schedule 30.03.2017
comment
Я не могу открыть консоль Python и запустить GRC. GRC - причина, по которой я установил Python3   -  person BryanWheelock    schedule 30.03.2017
comment
Опять же, что конкретно вы делаете? Я не знаю, что такое GRC. Когда вы открываете терминал и набираете python, вы получаете эту ошибку?   -  person juanpa.arrivillaga    schedule 30.03.2017
comment
python - это консоль для python2.7 в моей системе. Консоль python3 находится в /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 и выдает ошибку, о которой я упоминал выше.   -  person BryanWheelock    schedule 30.03.2017
comment
Хорошо, сделайте то же, что и вы, и вместо python3 попробуйте _2 _... вы что-нибудь видите?   -  person juanpa.arrivillaga    schedule 30.03.2017
comment
@BryanWheelock, возможно, вы найдете здесь решение github.com/Homebrew/homebrew-core/issues / 9229   -  person Ceppo93    schedule 30.03.2017
comment
@ juanpa.arrivillaga Я был в своем домашнем каталоге, когда я выполнил /Library/Frameworks/Python.framework/Versions/3.6/bin/python3 - ls enum * ничего не вернул.   -  person BryanWheelock    schedule 31.03.2017
comment
@ Ceppo93 Проблема не решена в этой ветке.   -  person BryanWheelock    schedule 31.03.2017
comment
Собственно, так и было. Убедитесь, что нигде в ваших файлах конфигурации оболочки PYTHONPATH не указывает на вашу установку Python 2.7. Похоже, это вполне могло быть причиной этого.   -  person juanpa.arrivillaga    schedule 31.03.2017
comment
Попробуйте запустить интерпретатор с опцией -I, чтобы игнорировать пакеты сайтов и переменную среды и / или с -v, чтобы увидеть подробные сообщения об импорте   -  person Ceppo93    schedule 31.03.2017
comment
Отвечает ли это на ваш вопрос? AttributeError: модуль enum не имеет атрибута IntFlag - fastai установить   -  person Anonymous    schedule 21.02.2021


Ответы (19)


Это потому, что ваш 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, вы можете попробовать использовать _ 7_ в качестве требования. Он устанавливает только enum34 для более старых версий python без перечисления стандартной библиотеки.

person Håken Lid    schedule 16.08.2017
comment
Это убивает ipython2 --> traitlets --> enum34. (К сожалению, enum34 установлен в .../2.7/site-packages/enum, а не в .../2.7/site-packages/enum34 - напрашиваются проблемы.) - person denis; 31.08.2017
comment
да, вы правы - это просто на заметку всем, кто пытается использовать и то, и другое. - person denis; 01.09.2017
comment
Это решило мою проблему, я использую только python 3.6.3, никакой другой версии - person Wadaane; 06.12.2017
comment
Почему этот ответ не был принят? Решило ли это проблему автора? Это сработало для меня! - person aravk33; 08.03.2018
comment
В моем случае это дало мне Skipping enum34 as it is not installed .. Я использую 3.7 - person Rotkiv; 13.07.2018
comment
Что, если 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. - person Andrey; 20.07.2018
comment
Не помогло, извините. - person ibodi; 08.08.2018
comment
@Rotkiv какое решение. Я также использую 3.7 и сталкиваюсь с той же проблемой. - person Krishna; 30.08.2018
comment
когда набираю print(enum.__file__), я возвращаюсь: /Library/Python/2.7/site-packages/enum/__init__.py, это правильно? - person Cynthia GS; 19.10.2018
comment
@ HåkenLid да, я получаю ту же ошибку: Error in sitecustomize; set PYTHONVERBOSE for traceback: AttributeError: module 'enum' has no attribute 'IntFlag' Traceback (most recent call last): File "/usr/local/bin/jupyter", line 4, in <module> import re File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py", line 143, in <module> class RegexFlag(enum.IntFlag): AttributeError: module 'enum' has no attribute 'IntFlag' и удаление enum34 не помогает, я возвращаюсь, что он не установлен. - person Cynthia GS; 20.10.2018
comment
@ HåkenLid Это случается, когда я, кстати, пытаюсь открыть jupyter notebook. - person Cynthia GS; 20.10.2018
comment
@Rotkiv У меня это было в моем Python 2.7, которого не было в моем PATH (у меня python 3.7), поэтому pip / поэзия не нашла его. Удаление python 2.7 (удаление enum34, безусловно, было бы достаточным) и перезапуск моего компьютера решили это. - person niklasolsn; 10.07.2020
comment
pip2.7 uninstall -y enum34 отлично работал у меня. - person alexopoulos7; 16.09.2020
comment
print(enum.__file__) вернул /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/enum.py для меня, но enum34 действительно был установлен и находился в пакетах сайта виртуальной среды, поэтому pip uninstall -y enum34 решил проблему - person fdermishin; 01.11.2020
comment
Это сработало для меня при попытке установить библиотеку геокуба - person wfgeo; 14.04.2021

Не уверен, осталась ли у вас эта проблема. У меня была аналогичная проблема, и я смог решить ее, просто отключив PYTHONPATH

$ unset PYTHONPATH

person V. Singh    schedule 09.06.2017
comment
Просто к сведению пользователей PyCharm, чтобы отключить PYTHONPATH, я щелкнул Settings->Build, Execution, Deployment->Console->Python Console. Затем я удалил переменную PYTHONPATH из поля под названием Environment variables. Примечание: на момент написания этой статьи я использовал PyCharm 2017.1.2. - person MikeyE; 09.08.2017
comment
Это работает, но без комбинации путей, которые включают мои библиотеки Python 2, я могу заставить его работать. Я хотел бы знать почему. - person Ulf Aslak; 06.02.2018
comment
Да, в Windows я перезапустил командную строку, она сработала, возможно, косвенно сбросил PYTHONPATH - person Karan Kaw; 15.07.2018
comment
Я возвращаюсь к этому раз в неделю, по крайней мере, чтобы узнать об этом - есть ли у кого-нибудь объяснение почему это работает? - person Owen; 12.12.2020

Для меня эта ошибка возникла после установки компонента gcloud app-engine-python для интеграции в pycharm. Удаление модуля помогло, даже если pycharm теперь не загружается в app-engine.

person mickmackk    schedule 10.12.2018
comment
Я получил эту ошибку, запустив Flask под PyCharm, и исправил ее, отключив поддержку AppEngine в проекте (Настройки - ›Языки и рамки -› Google App Engine). Среда выполнения 2-го поколения для Python3 не использует сервер разработки движка приложений, поэтому это имеет смысл (это для Python 2.x). - person Brett; 28.03.2019

Если кто-то приходит сюда из-за получения этой ошибки при запуске проекта стандартной среды Python 3.7 для движка приложений Google в PyCharm, то все, что вам нужно сделать, это

  • Убедитесь, что запускаемая конфигурация предназначена для Flask, а не для конфигурации Google App Engine.
  • Затем отключите поддержку Google App Engine в разделе Preferences >> Languages ​​& Framework >> Google App Engine.

Причина в соответствии с этой ссылкой

Общая цель состоит в том, чтобы ваше приложение было полностью переносимым и работало в любой стандартной среде Python. Вы пишете стандартное приложение Python, а не приложение Python для App Engine. В рамках этого перехода вам больше не нужно использовать проприетарные API-интерфейсы и службы App Engine для основных функций вашего приложения. В настоящее время API-интерфейсы App Engine недоступны в среде выполнения Python 3.7.

Я думаю, когда мы создаем проект python 3.7 в PyCharm в качестве проекта движка приложений Google, он по-прежнему пытается делать то же самое, что и для приложения python2.7.

person Joseph Abraham    schedule 06.04.2019
comment
Итак, при написании для Google App Engine из Pycharm нужно ли вручную загружать свой код в облако, или Pycharm по-прежнему сможет загружать в App Engine? - person Ben; 30.09.2019
comment
@Ben Я не совсем понимаю, что вы имеете в виду, когда вручную загружаете код в облако (Google App Engine). Если вы имеете в виду развертывание в App Engine, используйте команду gcloud app deploy. Это не имеет ничего общего с пичармом. - person Joseph Abraham; 05.12.2019
comment
Я просто любитель в этом, но я думал, что включение поддержки App Engine в Pycharm дает вам возможность использовать команду меню для развертывания кода. Но когда вы отключаете поддержку движка приложений в Pycharm (т. Е. Чтобы использовать Python 3.7), вам нужно перейти в командную строку для развертывания кода. Имею ли я это право, или я неверно истолковал работу движка приложения в версии 2.7? - person Ben; 05.12.2019
comment
@Ben Это потому, что инструменты поддержки движка приложений Pycharm нацелены на Python 2.7. Как я уже упоминал в своем ответе, Google считает приложения движка стандартных приложений Python 3.7 стандартным приложением Python. И я считаю, что это причина того, что Pycharm также ведет себя таким же образом для приложений движка приложений Python 3.7. - person Joseph Abraham; 06.12.2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Пожалуйста, @ juanpa.arrivillaga, если вы видите этот ответ, не стесняйтесь писать свой собственный, и я удалю это сообщение.

@ juanpa.arrivillaga упоминалось выше:

Есть ли случайно в вашем рабочем каталоге файл с именем enum.py?

Это была проблема, с которой я столкнулся. В то время я не знал о модуле enum на Python и назвал свой тестовый файл enum.py.

Поскольку имя файла является именем модуля, возник конфликт. Дополнительная информация о модулях здесь: https://docs.python.org/2/tutorial/modules.html

person dannypaz    schedule 03.03.2018
comment
Ты спас мне жизнь. - person Gastón; 31.03.2020

У меня сработала установка версии 1.1.8 enum34.

Я смог исправить это, добавив enum34 = "== 1.1.8" в pyproject.toml. По-видимому, в версии 1.1.8 в enum34 была функция, позволяющая избежать этой ошибки, но в версии 1.1.9 + она исчезла. Однако это всего лишь обходной путь. Лучшим решением было бы, чтобы пакеты использовали маркеры среды, поэтому вам вообще не нужно устанавливать enum34, если в этом нет необходимости.

Источник: https://github.com/python-poetry/poetry/issues/1122

person Josh Wolff    schedule 04.06.2020
comment
Это решение сработало для меня при попытке использовать pyinstaller. - person Jack Hales; 12.08.2020
comment
Информация: команда для обновления enum34 до версии 1.1.8 pip install enum34 == 1.1.8 - person Manjunath K Mayya; 13.06.2021

Отключение «поддержки Google App Engine» в настройках pycharm устранило эту проблему для меня.

настройки движка приложения pycharm

person chmoder    schedule 21.08.2019
comment
Работает для меня. У меня была такая же проблема с запуском Flask в режиме отладки из PyCharm - person Khanh Hua; 04.03.2020
comment
У меня это работает. Поскольку на самом деле google sdk использует python2. ... - person Jose Mar; 20.04.2020

Ответ Håken Lid помог решить мою проблему (спасибо!), В моем случае он присутствует в Python3.7, который запускает Flask в контейнере Docker (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
...
person bandaangosta    schedule 02.10.2018

У меня возникла эта проблема при установке библиотеки transformers из HuggingFace. Это произошло из-за того, что в моей среде был установлен пакет enum34, который переопределял встроенное перечисление в Python. Этот пакет, вероятно, был установлен кем-то для прямой совместимости, которая больше не нужна с Python 3.6+. Итак, решение простое:

pip uninstall -y enum34
person Shital Shah    schedule 18.12.2020
comment
Решает проблему на моем Linux 5.9.11-3-MANJARO с Python 3.8 при установке curtsies. - person MKaama; 04.02.2021

Если вам нужно сохранить PYTHONPATH как для python2, так и для python3, вы можете написать операторы псевдонима, чтобы установить правильный PYTHONPATH в вашем bash_profile:

Жестко закодируйте переменные PYTHONPATH2 и PYTHONPATH3 в свой ~ / .bash_profile и добавьте в конец следующие псевдонимы:

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

Мой python (относится к python2), поскольку я чаще использую python2.

person user3804602    schedule 14.04.2019
comment
Это предложение не работает; по-прежнему получаю ту же ошибку. - person Derek; 03.07.2019

Когда когда-либо у меня возникала эта проблема:

AttributeError: модуль enum не имеет атрибута IntFlag

просто сначала я запускаю команду:

unset PYTHONPATH 

а затем запустить желаемую команду и добиться в этом успеха.

person Gaurav    schedule 24.06.2019
comment
это потому, что ваш PYTHONPATH должен указывать на материал, принадлежащий старой версии python, как в моем случае. Это сработало - person nish; 26.08.2019
comment
Устаревший VENV в моем случае. Спасибо за чаевые :) - person Janusz Skonieczny; 01.10.2019

Я сделал это с помощью 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" .

person Sidharth Rai    schedule 17.07.2020
comment
в enum34 нет версии 1.1.20: pypi.org/project/enum34/#history - person user12386945; 05.10.2020

Если у вас возникла эта проблема при запуске тестов в PyCharm, убедитесь, что второй флажок снят в настройках.

person Yushan ZHANG    schedule 21.07.2020

У меня на компьютере установлены Python 2 и Python 3. По какой-то странной причине у меня в sys.path Python 3 также есть путь к каталогу библиотеки sitepackage Python2, когда вызывается модуль re. Если я запускаю 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

Это решило мою проблему.

person bunkus    schedule 10.03.2019

Даже у меня была эта проблема при запуске python -m grpc_tools.protoc --version Пришлось установить PYTHONPATH до пакетов сайта и закрыть все окна командной строки, и это сработало. Надеюсь, это поможет пользователям gRPC.

person Ezio    schedule 05.05.2020

У меня была эта проблема в ubuntu20.04 в jupyterlab в моем виртуальном ядре env с python3.8 и tensorflow 2.2.0. Сообщение об ошибке было

 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 скоро полностью прекратится.

person Markus Kaukonen    schedule 10.07.2020
comment
Это решение может создать ужасный беспорядок в вашей системе! Вам следует использовать virtualenv вместо изменения Python по умолчанию для всей системы. - person Alex Baranowski; 21.07.2020
comment
Спасибо что подметил это. Я пока не заметил никаких проблем (но я всегда стараюсь избегать python2, насколько это возможно). Любители Python2 определенно не должны этого делать. - person Markus Kaukonen; 22.07.2020

Я столкнулся с той же проблемой, но не смог изменить среду, в которой запускается скрипт. Так что исправления здесь не применимы ко мне.

Вместо этого я сделал

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
person CodeMonkey    schedule 15.03.2021

К сожалению, ни одно из предложений мне не помогло, но после еще нескольких погуглить это

pip install aenum

решил это для меня

person Andrei Bazarenko    schedule 06.10.2020

Если у кого-то возникает эта проблема при попытке запустить ядро ​​Jupyter из virtualenv, просто добавьте правильный 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"
}
}
person dimitrijer    schedule 18.05.2018
comment
Здесь жестко запрограммирован ваш пользовательский каталог. Это решение не подойдет новичкам: объясните, пожалуйста, что оно делает и где найти соответствующие файлы. - person Tom Kelly; 11.06.2018