성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>파이썬 - <class 'AttributeError'> module 'flask.json' has no attribute 'JSONEncoder'</h1> <p> 개인적으로, 파이썬의 패키지 관리가 좀 마음에 들지 않습니다. ^^; 파이썬 경력이 얼마 없지만, 그사이 이상한 충돌 현상을 겪은 것이 서너 번 정도 되는 것 같습니다.<br /> <br /> 예를 들어, WSL + Ubuntu 20.04가 설치된 환경에서 python 3.8.10을 설치 후 Flask와, Flask-Migrate를 설치하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ python3 -m pip install Flask==2.2.2 $ python3 -m pip install Flask-Migrate==3.1.0 </pre> <br /> 지정한 버전 그대로 설치가 됩니다. 그런데, container 이미지인 "python:3.8-slim-buster"로 구성한 환경(파이썬 버전 3.8.12)에서 위의 설치 명령을 실행하면, Flask-Migrate 설치 과정에서 아래와 같이 Flask를 2.3.2 버전으로 업데이트를 해버립니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # python3 -m pip install Flask==2.2.2 # <span style='color: blue; font-weight: bold'>pip install Flask-Migrate==3.1.0</span> Requirement already satisfied: Flask-Migrate==3.1.0 in /usr/local/lib/python3.8/site-packages (3.1.0) <span style='color: blue; font-weight: bold'>Requirement already satisfied: Flask>=0.9</span> in /usr/local/lib/python3.8/site-packages (from Flask-Migrate==3.1.0) (2.2.2) ...[생략]... Installing collected packages: Flask Attempting uninstall: Flask <span style='color: blue; font-weight: bold'>Found existing installation: Flask 2.2.2</span> Uninstalling Flask-2.2.2: <span style='color: blue; font-weight: bold'>Successfully uninstalled Flask-2.2.2</span> <span style='color: blue; font-weight: bold'>Successfully installed Flask-2.3.2</span> </pre> <br /> 출력을 보면, 분명히 "Requirement already satisfied: Flask>=0.9"라고 해서 조건을 만족하는 것으로 나오는데 새롭게 2.3.2 버전을 설치하고 있습니다. 여기서 문제는, 위와 같은 조건의 환경에서 Flask App을 실행하면 이런 예외가 발생하면서 Flask 환경 구성에 실패한다는 점입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Traceback (most recent call last):, File "./wsgi.py", line 4, in <module>, application = pybo.create_app(), File "/app/build_root/flask_sample/./pybo/__init__.py", line 45, in create_app, from .views import main_views, question_views, answer_views, auth_views, File "/app/build_root/flask_sample/./pybo/views/question_views.py", line 3, in <module>, from ..forms import QuestionForm, AnswerForm, File "/app/build_root/flask_sample/./pybo/forms.py", line 1, in <module>, from flask_wtf import FlaskForm, File "/usr/local/lib/python3.8/site-packages/flask_wtf/__init__.py", line 4, in <module>, from .recaptcha import Recaptcha, File "/usr/local/lib/python3.8/site-packages/flask_wtf/recaptcha/__init__.py", line 1, in <module>, from .fields import RecaptchaField, File "/usr/local/lib/python3.8/site-packages/flask_wtf/recaptcha/fields.py", line 3, in <module>, from . import widgets, File "/usr/local/lib/python3.8/site-packages/flask_wtf/recaptcha/widgets.py", line 6, in <module>, JSONEncoder = json.JSONEncoder, AttributeError: module 'flask.json' has no attribute 'JSONEncoder', </pre> <br /> 해결 방법은, 설치 순서를 바꾸면 됩니다. ^^;<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # python:3.8-slim-buster 환경에서, 아래는 Flask 2.3.2 버전을 설치하고, pip install Flask-Migrate==3.1.0 # 위에서 설치한 2.3.2를 제거하고 2.2.2로 새롭게 설치 pip install Flask==2.2.2 </pre> <br /> <hr style='width: 50%' /><br /> <br /> 관련해서 검색해 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Flask AttributeError: module 'flask.json' has no attribute 'JSONEncoder' ; <a target='tab' href='https://stackoverflow.com/questions/76107450/flask-attributeerror-module-flask-json-has-no-attribute-jsonencoder/76325779#76325779'>https://stackoverflow.com/questions/76107450/flask-attributeerror-module-flask-json-has-no-attribute-jsonencoder/76325779#76325779</a> </pre> <br /> 이 문제가 Flask-WTF 모듈과도 연관이 있다고 나옵니다. 따라서 만약 Flask-Migrate가 원하는 대로 2.3.2 버전의 Flask 업데이트 상황에서도 정상적으로 사용하고 싶다면 Flask-WTF 모듈을 1.1.1 버전 이상으로 업데이트하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > # python:3.8-slim-buster 환경에서, 아래는 Flask 2.2.2 버전을 설치하지만, pip install Flask==2.2.2 # 아래의 명령으로 인해 Flask 2.3.2 버전이 설치되고, pip install Flask-Migrate==3.1.0 # Flask-WTF 버전을 1.1.1 이상으로 올림으로써 AttributeError 예외가 나지 않도록 구성 pip install Flask-WTF==1.1.1 </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1485
(왼쪽의 숫자를 입력해야 합니다.)