Waarom python 3.6.1 AttributeError genereert: module ‘enum’ heeft geen attribuut ‘IntFlag’?

Ik heb zojuist Python 3.6.1 voor MacOS X geïnstalleerd

Wanneer ik probeer de console uit te voeren (of iets met Python3) uit te voeren, wordt deze fout gegenereerd:

 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'  

De klasse IntFlag bestaat binnen enum.py. Dus, waarom wordt de AttributeError gegooid?


Antwoord 1, autoriteit 100%

Het is omdat je enumniet de standaard bibliotheek enummodule is. Je hebt waarschijnlijk het pakket enum34geïnstalleerd.

Een manier om te controleren of dit het geval is, is door de eigenschap enum.__file__

te inspecteren

import enum
print(enum.__file__)  
# standard library location should be something like 
# /usr/local/lib/python3.6/enum.py

Sinds python 3.6 is de enum34-bibliotheek niet langer compatibel met de standaardbibliotheek. De bibliotheek is ook niet nodig, dus u kunt deze eenvoudig verwijderen.

pip uninstall -y enum34

Als je de code nodig hebt om op zowel de python-versies <=3.4 als >3.4 te draaien, kun je proberen enum-compatals een vereiste. Het installeert alleen enum34voor oudere versies van python zonder de standaard bibliotheek-enum.


Antwoord 2, autoriteit 31%

Ik weet niet zeker of je dit probleem nog steeds hebt. Ik had een soortgelijk probleem en ik kon het eenvoudig oplossen door PYTHONPATH

uit te schakelen

$ unset PYTHONPATH


Antwoord 3, autoriteit 4%

Bij mij trad deze fout op na het installeren van de gcloud-component app-engine-python om te integreren in pycharm. Het verwijderen van de module hielp, zelfs als pycharm nu niet uploadt naar app-engine.


Antwoord 4, autoriteit 4%

Als iemand hier komt vanwege deze fout tijdens het uitvoeren van een google app-engine Python 3.7 standaardomgevingsproject in PyCharm, dan hoeft u alleen maar

  • Zorg ervoor dat de configuratie die moet worden uitgevoerd voor Flask is, niet voor de Google App Engine-configuratie.
  • Schakel vervolgens de ondersteuning voor Google App Engine uit onder Voorkeuren >> Talen & Kader >> Google App Engine

De reden is volgens deze link

Het algemene doel is dat uw app volledig draagbaar moet zijn en in elke standaard Python-omgeving moet worden uitgevoerd. U schrijft een standaard Python-app, geen App Engine Python-app. Als onderdeel van deze verschuiving hoeft u niet langer eigen App Engine-API’s en -services te gebruiken voor de kernfunctionaliteit van uw app. Op dit moment zijn App Engine API’s niet beschikbaar in de Python 3.7 runtime.

Ik denk dat wanneer we een python 3.7-project in PyCharm maken als een Google-app-engine-project, het nog steeds hetzelfde probeert te doen als voor een python2.7-app


Antwoord 5, autoriteit 3%

DISCLAIMER:Alsjeblieft, @juanpa.arrivillaga, als je dit antwoord ziet, voel je vrij om je eigen antwoord te schrijven en ik zal dit bericht verwijderen.

@juanpa.arrivillaga had hierboven vermeld:

Is er toevallig een bestandsnaam enum.py in uw werkdirectory?

Dit was het probleem dat ik tegenkwam. Ik was op dat moment niet op de hoogte van de enum-module op python en had mijn testbestand enum.pygenoemd.

Aangezien de bestandsnaam isde modulenaam, was er een conflict. Meer informatie over modules hier: https://docs.python.org/2/tutorial/modules .html


Antwoord 6, autoriteit 3%

Het installeren van versie 1.1.8 van enum34 werkte voor mij.

Ik heb dit kunnen oplossen door enum34 = “==1.1.8” toe te voegen aan pyproject.toml.
Blijkbaar had enum34 een functie in v1.1.8 die deze fout vermeed, maar
dit ging achteruit in v1.1.9+. Dit is echter slechts een oplossing. De
een betere oplossing zou zijn dat pakketten omgevingsmarkeringen gebruiken, dus
je hoeft enum34 helemaal niet te installeren, tenzij dat nodig is.

Bron: https://github.com/python-poetry/poetry/issues/ 1122


Antwoord 7, autoriteit 2%

Het uitschakelen van ‘Google App Engine-ondersteuning’ in de pycharm-voorkeuren loste dit probleem voor mij op.


Antwoord 8

Håken Lid’s antwoord hielp mijn probleem op te lossen (bedankt!), in mijn geval aanwezig in Python3.7 met Flask in een Docker-container (FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7).

In mijn geval werd enum34geïnstalleerd door een andere bibliotheek (pip install smartsheet-python-sdk).
Voor degenen die met een soortgelijk Docker-containerprobleem komen, hier is mijndefinitieve Dockerfile (uitgekleed tot de relevante regels):

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

Antwoord 9

Ik kreeg dit probleem tijdens het installeren van de bibliotheek transformersvan HuggingFace. Het was te wijten aan het feit dat pakket enum34in mijn omgeving was geïnstalleerd dat de ingebouwde enum in Python overheerste. Dit pakket is waarschijnlijk geïnstalleerd door iets wat betreft voorwaartse compatibiliteit dat niet langer nodig is met Python 3.6+. Dus de oplossing is eenvoudig,

pip uninstall -y enum34

Antwoord 10

Als je PYTHONPATH voor zowel python2 als python3 moet behouden, kun je alias-statements schrijven om het juiste PYTHONPATH in je bash_profile in te stellen:

Hardecodeer uw PYTHONPATH2- en PYTHONPATH3-variabelen in uw ~/.bash_profile, en voeg de volgende aliassen toe aan het einde ervan:

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

Mijn python(verwijst naar python2) aangezien ik python2 vaker gebruik.


Antwoord 11

Als ik dit probleem ooit heb:

AttributeError: module ‘enum’ heeft geen attribuut ‘IntFlag’

gewoon eerst voer ik het commando uit:

unset PYTHONPATH 

en voer dan mijn gewenste commando uit en heb daar succes mee.


Antwoord 12

Dat deed ik met behulp van pip install <required-library> --ignore-installed enum34
Zodra uw vereiste bibliotheek is geïnstalleerd, zoekt u naar waarschuwingen tijdens het bouwen.
Ik kreeg een foutmelding zoals deze:
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.

Om dit probleem nu op te lossen, voert u de opdracht uit: pip freeze | grep enum34. Dit geeft u de versie van de geïnstalleerde ENUM34. Verwijder het nu met pip uninstall enum34en installeer de vereiste versie opnieuw op pip install "enum34==1.1.20"


13

Ik heb Python 2 en Python 3 geïnstalleerd op mijn computer. Voor een vreemde reden heb ik in de Sys.Path of Python 3 ook een pad naar de sitepackage-bibliotheekdirectory van Python2 wanneer de re-module wordt genoemd. Als ik Python 3-en-import en importeer ENUM en print(enum.__file__)Het systeem toont dit Python 2-pad niet naar site-pakketten. Dus een zeer ruwe en vuile hack is, om de module rechtstreeks te wijzigen waarin ENUM wordt geïmporteerd (volg de traceback-paden) en plaats de volgende code net voordat u ENUM importeert:

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

die mijn probleem oplost.


14

Zelfs ik had dit probleem tijdens het uitvoeren van Python -M-GRPC_Tools.Protoc – Versie
Moest het Pythonpath tot site-pakketten instellen en alle opdrachtprompt Windows uitschakelen en het werkte. Ik hoop dat het helpt voor GRPC-gebruikers.


15

Ik had dit probleem in Ubuntu20.04 in JupyterLab in mijn virtuele env-kernel met Python3.8 en TensorFlow 2.2.0. Foutmelding was

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

Probleem was dat in symbolische link in / usr / bin / python naar Python2 wijst. Oplossing:

cd /usr/bin/
sudo ln -sf python3 python

Hopelijk zal Python 2 gebruik snel afleveren.


16

Ik had hetzelfde probleem, maar ik kon de omgeving waarin het script wordt uitgevoerd niet veranderen. Dus de oplossingen hier waren niet van toepassing op mij.

Wat ik in plaats daarvan deed was

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

Antwoord 17

Helaas heeft geen van de suggesties me geholpen, maar na wat meer googlendit

pip install aenum

heeft het voor mij opgelost


Antwoord 18

Als iemand dit probleem heeft bij het uitvoeren van de Jupyter-kernel vanaf een virtualenv, voeg dan gewoon de juiste PYTHONPATHtoe aan kernel.jsonvan uw virtualenv-kernel (bijvoorbeeld 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"
}
}

Other episodes