Programing

왜 파이썬 3.6.1이 AttributeError를 던지는가 : 모듈 'enum'에 'IntFlag'속성이 없나요?

lottogame 2020. 11. 3. 07:34
반응형

왜 파이썬 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


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
...

python2와 python3 모두에 대해 PYTHONPATH를 유지해야하는 경우 별칭 문을 작성하여 bash_profile에 적절한 PYTHONPATH를 설정할 수 있습니다.

~ / .bash_profile에 PYTHONPATH2 및 PYTHONPATH3 변수를 하드 코딩하고 끝에 다음 별칭을 추가합니다.

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

pythonpython2를 더 자주 사용하므로 My (python2 참조).


내 컴퓨터에 Python 2와 Python 3이 설치되어 있습니다. 이상한 이유로 파이썬 3의 sys.path에 re 모듈이 호출 될 때 Python2의 사이트 패키지 라이브러리 디렉토리에 대한 경로도 있습니다. 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

그것은 내 문제를 해결했습니다.


이 문제가 발생할 때마다 :

AttributeError : 'enum'모듈에 'IntFlag'속성이 없습니다.

먼저 명령을 실행합니다.

unset PYTHONPATH 

그런 다음 원하는 명령을 실행하면 성공했습니다.


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

pycharm 앱 엔진 환경 설정


누군가가 virtualenv에서 Jupyter 커널을 실행하려고 할 때이 문제가 발생하면 virtualenv 커널 (예 : Python 3)에 올바른 항목 PYTHONPATH추가 하기 만하면됩니다 kernel.json.

{
 "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"
}
}

참고 URL : https://stackoverflow.com/questions/43124775/why-python-3-6-1-throws-attributeerror-module-enum-has-no-attribute-intflag

반응형