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