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


119

방금 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가 발생하는 이유는 무엇입니까?


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

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6는 $ PATH에
BryanWheelock

2
... 그건 내가 요청한 것이 아닙니다. 내가 물었다 경우라는 이름의 파일이 있었다 * enum.py당신의 작업 디렉토리
juanpa.arrivillaga

4
사실 그랬습니다. "셸 구성 파일의 어디에도 PYTHONPATH가 Python 2.7 설치를 가리 키도록 설정되어 있는지 확인하십시오."
juanpa.arrivillaga

2
-I사이트 패키지 및 환경 변수를 무시 하는 옵션 및 / 또는 -v가져 오기에 대한 자세한 메시지를 보려면 인터프리터를 실행 하십시오
Ceppo93

답변:


230

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 에만 설치됩니다 .


이것은 죽인다 ipython2 --> traitlets --> enum34. (안타깝게도 not에 enum34설치되어 문제를 요청합니다.).../2.7/site-packages/enum.../2.7/site-packages/enum34
denis

1
네 말이 맞습니다. 두 가지를 모두 사용하려는 사람에게 보내는 메모 일뿐입니다.
denis

9
제 경우에는 Skipping enum34 as it is not installed.. 저는 3.7
Rotkiv를

1
print(enum.__file__)나에게 이것을 준다면 : /usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/enum.py. 표준 enum 라이브러리 가 있다는 의미 enum34입니까? 편집 : 그래, pip uninstall enum34나 준Skipping enum34 as it is not installed.
안드레이

1
@ HåkenLid 그건 내가 a를 열려고 할 때 발생합니다 jupyter notebook.
Cynthia GS

89

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

$ unset PYTHONPATH


2
PyCharm 사용자를 위해 FYI를 클릭하여 PYTHONPATH를 설정 해제하십시오 Settings->Build, Execution, Deployment->Console->Python Console. 그런 다음 필드에서 PYTHONPATH 변수를 제거했습니다 Environment variables. 참고 :이 글을 쓰는 시점에는 PyCharm 2017.1.2를 사용하고있었습니다.
MikeyE

이것은 작동하지만 Python 2 라이브러리를 포함하는 경로 조합없이 작동하도록 할 수 있습니다. 이유를 알고 싶습니다.
Ulf Aslak

예, 창, 나는 다시 시작 내 cmd를 프롬프트, 그것은 일, 어쩌면 간접적으로는 PYTHONPATH 재설정
카란 카우

12

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


4
PyCharm에서 Flask를 실행하는이 오류가 발생하고 프로젝트 (환경 설정-> 언어 및 프레임 워크-> Google App Engine)에서 AppEngine 지원을 비활성화하여 수정했습니다. Python3 용 2 세대 런타임은 앱 엔진 개발 서버를 사용하지 않으므로 이는 의미가 있습니다 (Python 2.x 용).
Brett

9

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 앱과 동일한 방식으로 수행하려고 시도합니다.


그렇다면 Pycharm에서 Google App Engine을 작성할 때 수동으로 코드를 클라우드에 업로드해야합니까? 아니면 Pycharm이 여전히 App Engine에 업로드 할 수 있습니까?
Ben

@Ben 클라우드 (Google App Engine)에 수동으로 코드를 업로드한다는 것이 무슨 뜻인지 잘 모르겠습니다. App Engine에 배포하는 것을 언급하는 경우 명령을 사용합니다 gcloud app deploy. 그것은 pycharm과 관련이 없습니다.
Joseph Abraham

저는 아마추어 일 뿐이지 만 Pycharm에서 App Engine 지원을 활성화하면 메뉴 명령을 사용하여 코드를 배포 할 수 있다고 생각했습니다. 그러나 Pycharm에서 앱 엔진 지원을 비활성화하면 (예 : Python 3.7 사용) 코드를 배포하기 위해 명령 줄로 이동해야합니다. 저에게 그 권리가 있습니까, 아니면 2.7에서 앱 엔진이 어떻게 작동하는지 잘못 해석 했습니까?

@Ben Pycharm 앱 엔진 지원 도구가 Python 2.7을 대상으로하기 때문입니다. 내 답변에서 언급했듯이 Google은 Python 3.7 표준 앱 엔진 앱을 표준 Python 앱으로 간주합니다. 그리고 이것이 Pycharm이 Python 3.7 앱 엔진 앱에서 이러한 방식으로 작동하는 이유라고 생각합니다.
조셉 아브라함

8

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

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

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

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

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


당신은 내 생명을 구했습니다.
Gastón

6

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

pycharm 앱 엔진 환경 설정


나를 위해 작동합니다. PyCharm
Khanh Hua

이것은 나를 위해 작동합니다. 실제로 google sdk는 python2를 사용하기 때문입니다. ...
Jose 3

3

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

2

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 참조).


이 제안은 작동하지 않습니다. 여전히 동일한 오류가 발생합니다.
Derek

2

이 문제가 발생할 때마다 :

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

먼저 명령을 실행합니다.

unset PYTHONPATH 

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


1
내 경우에는 PYTHONPATH가 이전 버전의 파이썬에 속하는 것을 가리켜 야하기 때문입니다. 그것은 일
표면 가공

제 경우에는 오래된 VENV입니다. 팁에 대한 Thx :)
Janusz Skonieczny

2

enum34 버전 1.1.8을 설치하면 효과적이었습니다.

pyproject.toml에 enum34 = "== 1.1.8"을 추가하여이 문제를 해결할 수있었습니다. 분명히 enum34에는이 오류를 피하는 v1.1.8의 기능이 있었지만 v1.1.9 이상에서는 회귀했습니다. 이것은 단지 해결 방법입니다. 더 나은 솔루션은 패키지가 환경 마커를 사용하므로 필요하지 않는 한 enum34를 전혀 설치할 필요가 없습니다.

출처 : https://github.com/python-poetry/poetry/issues/1122


1
이 솔루션은 저에게
효과적

1
이 솔루션은 pyinstaller.
Jack Hales

2

내가 사용했던 pip install <required-library> --ignore-installed enum34
당신의 필수 라이브러리가 설치되면 빌드하는 동안 경고를 봐. 다음과 같은 오류가 발생했습니다.
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.

이 문제를 해결하려면 이제 다음 명령을 실행하십시오 pip freeze | grep enum34.. 이것은 설치된 enum34의 버전을 제공합니다. 이제 제거 pip uninstall enum34하고 필요한 버전을 다음과 같이 다시 설치하십시오.
pip install "enum34==1.1.20"


1

내 컴퓨터에 Python 2와 Python 3이 설치되어 있습니다. 이상한 이유로 Python 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

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


0

심지어 python -m grpc_tools.protoc --version 실행하는 동안이 문제가 발생했습니다. PYTHONPATH를 사이트 패키지까지 설정하고 모든 명령 프롬프트 창을 종료해야했고 작동했습니다. gRPC 사용자에게 도움이되기를 바랍니다.


0

python3.8 및 tensorflow 2.2.0을 사용하는 가상 환경 커널의 jupyterlab에있는 ubuntu20.04에서이 문제가 발생했습니다. 오류 메시지 :

 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

문제는 / usr / bin / python의 심볼릭 링크에서 python2를 가리키는 것입니다. 해결책:

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

python2가 곧 죽기를 바랍니다! Terveisin, Markus


이 솔루션은 시스템에서 끔찍한 혼란을 일으킬 수 있습니다! 전체 시스템에 대한 기본 파이썬을 변경하는 대신 virtualenv를 사용해야합니다.
Alex Baranowski

지적 해 주셔서 감사합니다. 나는 아직 어떤 문제도 발견하지 못했다 (그러나 나는 항상 가능한 한 python2를 피한다). Python2 애호가들은 분명히 이것을하지 않습니다.
Markus Kaukonen

0

에서 테스트 를 실행할 때이 문제가 발생 하면 구성에서 두 번째 상자선택 해제 되어 PyCharm있는지 확인하십시오 .


-2

누군가가 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"
}
}

사용자 디렉토리는 여기에 하드 코딩됩니다. 이 솔루션은 초보자에게는 작동하지 않습니다. 수행중인 작업과 관련 파일을 찾을 수있는 위치를 설명하십시오.
Tom Kelly
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.