왜 파이썬 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'
python
python2를 더 자주 사용하므로 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 지원"을 비활성화하면이 문제가 해결되었습니다.
누군가가 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"
}
}
'Programing' 카테고리의 다른 글
C ++ 프로그램에 시간 지연을 어떻게 추가합니까? (0) | 2020.11.03 |
---|---|
mysql에서 전역 sql_mode 설정 (0) | 2020.11.03 |
HTML5 비디오 // 컨트롤을 완전히 숨기기 (0) | 2020.11.03 |
파일 또는 어셈블리 'WebGrease, Version = 1.5.1.25624, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'또는 해당 종속성 중 하나를로드 할 수 없습니다. (0) | 2020.11.03 |
C ++에서 헤더 파일을 제거해야합니까? (0) | 2020.11.03 |