Почему 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?

Ответы

Ответ 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 как & lt; = 3.4, так и> 3.4, вы можете попробовать использовать enum-compat в качестве требования. Он устанавливает только enum34 для более старых версий python без стандартного перечисления библиотеки.

Ответ 2

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

$ unset PYTHONPATH

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

@juanpa.arrivillaga упомянул выше:

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

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

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

Ответ 6

Ответ Håken Lid помог решить мою проблему (спасибо!), В моем случае присутствует в Python3.7 запуске Flask в контейнере Docker (FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7).

В моем случае enum34 устанавливался другой библиотекой (pip install smartsheet-python-sdk). Для тех, кто сталкивается с аналогичной проблемой контейнера Docker, вот мой окончательный файл Docker (разделенный на соответствующие строки):

FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7
...
RUN pip install -r requirements.txt
RUN pip uninstall -y enum34
...

Ответ 7

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

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

Ответ 8

Если вам нужно сохранить 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.

Ответ 9

Я также отключаю PYTHONPATH, и он работает на моем конце.

Ответ 10

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

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

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

unset PYTHONPATH 

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

Ответ 11

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

pycharm app engine preferences

Ответ 12

Я попробовал pip uninstall enum, у меня это не сработало. Я использую conda и были другие зависимости. Я на самом деле создал новую виртуальную среду с только необходимыми пакетами (и их зависимостями). Затем я установил пип установщик там. Это сработало. это было на окнах.

Ответ 13

Если у кого-то возникает эта проблема при попытке запустить ядро 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"
}
}