Почему 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 решило эту проблему для меня.
Ответ 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"
}
}