prosource

Python 3.6.1에서 AttributeError가 발생하는 이유: 모듈 'enum'에는 'IntFlag' 속성이 없습니까?

probook 2023. 6. 2. 20:38
반응형

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 내에 있습니다.그렇다면, 속성 오류가 발생하는 이유는 무엇일까요?

당신의 면당신의 때문입니다enum 라이브러리가 .enum모듈.패키지가 설치되어 있을 수 있습니다.

한 은 자산을 입니다.enum.__file__

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

python 3.6 이후 enum34 라이브러리는 더 이상 표준 라이브러리와 호환되지 않습니다.라이브러리도 불필요하므로 제거하기만 하면 됩니다.

pip uninstall -y enum34

만약 당신이 <=3.4와 >3.4 둘 다 파이썬 버전에서 실행하기 위해 코드가 필요하다면, 당신은 요구사항으로 가지고 있는 것을 시도할 수 있습니다.설치만 합니다.enum34표준 라이브러리 열거형이 없는 이전 버전의 파이썬용.

이 문제가 계속 발생하는지 여부를 확인할 수 없습니다.비슷한 문제가 있었는데 설정을 해제하는 것만으로 문제를 해결할 수 있었습니다.PYTHONPATH

$ unset PYTHONPATH

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

PyCharm에서 구글 앱 엔진 Python 3.7 표준 환경 프로젝트를 실행하는 동안 이 오류가 발생하여 여기에 오는 사람이 있다면 당신이 해야 할 일은 다음과 같습니다.

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

이유는 이 링크에 있습니다.

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

구글 앱 엔진 프로젝트로 파이썬 3.7 프로젝트를 만들 때 파이썬 2.7 앱과 동일한 방식을 시도하는 것 같습니다.

는 설하는동이문발생다니습을 하는 동안 했습니다.transformersHuggingFace의 라이브러리입니다.그것은 사실 패키지 때문이었습니다.enum34Python의 기본 제공 열거형을 재정의하는 내 환경에 설치되었습니다.이 패키지는 Python 3.6+에서 더 이상 필요하지 않은 상위 호환성을 위해 설치되었을 수 있습니다.그래서 해결책은 간단하게,

pip uninstall -y enum34

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

@httpspa.httpsvillaga는 위에서 언급했습니다.

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

이것이 제가 직면한 문제였습니다.나는 그때 파이썬의 열거형 모듈을 알지 못했고 내 테스트 파일의 이름을 지정했습니다.enum.py.

파일 이름이 모듈 이름이기 때문에 충돌이 발생했습니다.모듈에 대한 자세한 내용은 여기에서 확인하십시오. https://docs.python.org/2/tutorial/modules.html

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

pycharm 앱 엔진 기본 설정

Lid의 를 실행하는 Python 3 제 를 하는 데 이 되었습니다. (Hoken Lid 답변감되었니다습다니이사합는움의 Python 3.7의 경우 도커 컨테이너에서 플라스크를 실행하고 있습니다. (FROM tiangolo/uwsgi-nginx-flask:python3.7-alpine3.7).

저 같은 경우에는.enum34라이브러리에 .pip install smartsheet-python-sdk) 유사한 도커 컨테이너 문제가 있는 사람들을 위해, 다음은 나의 마지막 도커 파일입니다(관련 줄로 잘라짐).

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

이 문제가 발생할 때마다:

특성 오류: 모듈 'enum'에 'IntFlag' 특성이 없습니다.

먼저 명령을 실행합니다.

unset PYTHONPATH 

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

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

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

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

나의python) 를 더 자주 (python2는 python2보다 더 사용합니다.)

컴퓨터에 Python 2와 Python 3이 설치되어 있습니다.어떤 이상한 이유로 Python 3의 sys.path에 모듈이 호출될 때 Python2의 사이트 패키지 라이브러리 디렉터리에 대한 경로도 있습니다.Python 3을 실행하고 열거형 및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

그것으로 저의 문제가 해결되었습니다.

를 사용하여 수행했습니다.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"

에서 테스트를 실행할 때 이 문제가 발생하는 경우PyCharm구성에서 두 번째 상자를 선택하지 않았는지 확인합니다.

python3.8 및 tensorflow 2.2.0을 사용하는 가상 env 커널의 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/symbolic 링크에서 python2를 가리키는 것이었습니다.솔루션:

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

Python 2의 사용량이 곧 완전히 줄어들기를 바랍니다.

2022년 업데이트

최신 버전의 Python(내 경우 3.9.x)을 사용하는 경우, 이 라이브러리는 "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5 및 2.4"로 설명되므로 "enum34"가 전혀 필요하지 않습니다.

그래서 저의 경우, 해결책은 그것을 완전히 없애는 것이었습니다.

pip uninstall enum34

이제 Pycharm은 내 앱을 완벽하게 실행합니다.

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

불행하게도 어떤 제안도 나에게 도움이 되지 않았지만, 이것을 좀 더 검색한 후에.

pip install aenum

나를 위해 그것을 해결했습니다.

동일한 문제에 직면했지만 스크립트가 내부에서 실행되는 환경을 변경할 수 없었습니다.그래서 여기에 있는 수정 사항들은 저에게 적용되지 않았습니다.

대신에 제가 한 일은

import os
import sys
os.environ["PYTHONPATH"] = os.pathsep.join(
    (p for p in os.environ["PYTHONPATH"].split(os.pathsep) if "python2" not in p)
)
sys.path = [p for p in sys.path if "python2" not in p]

# Now that the paths are clean, we can import re
import re

는 제 를 제문는제디를다음같것표다입니시한이과로 한 것입니다.Test Sources Root파이썬의 원인이 된 파이챠밍으로.ast enum에 내에<my_test_src_root_dir>/__init__.py(비어 있음).던졌던 라인을 클릭한 다음 제어함으로써 이것을 발견했습니다 (맥).CMD-B) 에 enum패키지와 그것이 그에게 간 것을 보는 것.__init__.py표시된 디렉토리의 파일입니다.

던져진 파일:

"/opt/homebrew/Cellar/python@3.10/3.10.2/프레임워크/Python.framework/버전/3.10/lib/python3.10/ast.py "

던진 줄:

from enum import IntEnum, auto

오류:

가져오기 오류: 'enum'에서 'IntEnum' 이름을 가져올 수 없습니다(.../path/to/_init_.py).

할때 이 ▁correct▁add▁if▁just▁is다됩▁from가▁when▁problem니하면▁anyone를 추가하면 됩니다.PYTHONPATHkernel.json가상 환경 커널(예: Python 3):

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

코드베이스에 enum이라는 이름의 파일 또는 폴더가 없는지 확인합니다.

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

반응형