162 votes

Pourquoi Python 3.6.1 lève AttributeError: le module 'enum' n'a pas d'attribut 'IntFlag'?

Je viens d'installer Python 3.6.1 pour MacOS X

Lorsque j'essaie d'exécuter la console (ou quoi que ce soit avec Python3), cette erreur est générée:

   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'  
 

La classe IntFlag existe dans enum.py. Alors, pourquoi l'attribut AttributeError est-il lancé?

318voto

Håken Lid Points 10106

C'est parce que votre enum n'est pas de la bibliothèque standard enum module. Vous avez probablement le paquet enum34 installé.

Une façon de vérifier si c'est le cas pour l'inspection de la propriété enum.__file__

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

Depuis python 3.6 le enum34 bibliothèque n'est plus compatible avec la bibliothèque standard. La bibliothèque est également inutile, de sorte que vous pouvez il suffit de le désinstaller.

pip uninstall enum34

Si vous avez besoin du code à exécuter sur les deux versions de python <=3,4 et >3.4, vous pouvez essayer d'avoir des enum-compat comme une exigence. Il n'installe enum34 pour les anciennes versions de python sans la bibliothèque standard enum.

99voto

V. Singh Points 731

Je ne sais pas si vous avez toujours ce problème. J'ai eu un problème similaire et j'ai pu le résoudre simplement en annulant PYTHONPATH

$ unset PYTHONPATH

14voto

mickmackk Points 81

Pour moi, cette erreur s’est produite après l’installation du composant gcloud app-engine-python afin de l’intégrer à pycharm. La désinstallation du module a aidé, même si pycharm n’a pas été chargé sur app-engine.

9voto

dannypaz Points 1094

AVERTISSEMENT: s'il vous Plaît, @juanpa.arrivillaga, si vous voyez cette réponse, n'hésitez pas à écrire votre propre et je vais supprimer ce post.

@juanpa.arrivillaga avait mentionné ci-dessus:

Est-il un nom de fichier enum.py dans votre répertoire de travail, par hasard?

C'était le problème que j'ai rencontré. Je n'étais pas au courant de l'enum module python à l'époque et avait nommé mon fichier de test enum.py.

Depuis le nom de fichier est le nom du module, il y avait un conflit. Plus d'infos sur les modules ici: https://docs.python.org/2/tutorial/modules.html

4voto

bandaangosta Points 31

La réponse de Håken Lid a aidé à résoudre mon problème (merci!), Dans mon cas présent dans Python3.7 exécutant Flask dans un conteneur Docker ( FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7 ).

Dans mon cas, enum34 était installé par une autre bibliothèque ( pip install smartsheet-python-sdk ). Pour ceux qui viennent avec un problème de conteneur Docker similaire, voici mon dernier fichier Dockerfile (dépouillé jusqu'aux lignes appropriées):

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X