[python] 왜 파이썬 3.6.1이 AttributeError를 던지는가 : 모듈 ‘enum’에 ‘IntFlag’속성이 없나요?

방금 MacOS X 용 Python 3.6.1을 설치했습니다.

콘솔을 실행하려고하면 (또는 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가 발생하는 이유는 무엇입니까?



답변

enum표준 라이브러리 enum모듈 이 아니기 때문 입니다. 패키지가 enum34설치되어 있을 것입니다 .

이것이 사실인지 확인하는 한 가지 방법은 속성을 검사하는 것입니다. enum.__file__

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

파이썬 3.6부터 enum34 라이브러리는 더 이상 표준 라이브러리와 호환되지 않습니다. 라이브러리도 필요하지 않으므로 간단히 제거 할 수 있습니다.

pip uninstall -y enum34

Python 버전 <= 3.4 및> 3.4에서 실행하기 위해 코드가 필요한 경우 enum-compat요구 사항으로 사용해 볼 수 있습니다 . enum34표준 라이브러리 열거 형이없는 이전 버전의 python 에만 설치됩니다 .


답변

여전히이 문제가 있는지 확실하지 않습니다. 비슷한 문제가 있었는데 설정을 해제하면 간단히 해결할 수있었습니다.PYTHONPATH

$ unset PYTHONPATH


답변

나 에게이 오류는 pycharm에 통합하기 위해 gcloud 구성 요소 app-engine-python을 설치 한 후에 발생했습니다. pycharm이 이제 app-engine에 업로드되지 않더라도 모듈을 제거하면 도움이되었습니다.


답변

PyCharm에서 Google 앱 엔진 Python 3.7 표준 환경 프로젝트를 실행하는 동안이 오류가 발생하여 여기에 오는 사람은 다음과 같습니다.

  • 실행할 구성이 Google App Engine 구성이 아닌 Flask 용인지 확인합니다.
  • 그런 다음 환경 설정 >> 언어 및 프레임 워크 >> Google App Engine에서 Google App Engine 지원을 비활성화합니다.

링크에 따른 이유

전반적인 목표는 앱이 완전히 이식 가능하고 모든 표준 Python 환경에서 실행되어야한다는 것입니다. App Engine Python 앱이 아닌 표준 Python 앱을 작성합니다. 이러한 변화의 일환으로 더 이상 앱의 핵심 기능을 위해 독점 App Engine API 및 서비스를 사용할 필요가 없습니다. 현재 App Engine API는 Python 3.7 런타임에서 사용할 수 없습니다.

PyCharm에서 Google 앱 엔진 프로젝트로 python 3.7 프로젝트를 만들 때 여전히 python2.7 앱과 동일한 방식으로 수행하려고 시도합니다.


답변

면책 조항 : @ juanpa.arrivillaga,이 답변이 보이면 언제든지 직접 작성해 주시면이 게시물을 제거하겠습니다.

@ juanpa.arrivillaga 는 위에서 언급했습니다 .

혹시 작업 디렉토리에 enum.py 파일 이름이 있습니까?

이것이 내가 만난 문제였습니다. 나는 당시 파이썬의 enum 모듈을 인식하지 못했고 내 테스트 파일의 이름을 지정했습니다 enum.py.

파일 이름 모듈 이름이므로 충돌이 발생했습니다. 모듈에 대한 자세한 정보는 https://docs.python.org/2/tutorial/modules.html을 참조 하십시오.


답변

pycharm 환경 설정에서 “Google App Engine 지원”을 비활성화하면이 문제가 해결되었습니다.

pycharm 앱 엔진 환경 설정


답변

Håken Lid의 답변은 내 문제를 해결하는 데 도움이되었습니다 (감사합니다!). 제 경우에는 Docker 컨테이너에서 Flask를 실행하는 Python3.7에 있습니다 ( 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
...