Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

파이썬 - <class 'AttributeError'> module 'flask.json' has no attribute 'JSONEncoder'

개인적으로, 파이썬의 패키지 관리가 좀 마음에 들지 않습니다. ^^; 파이썬 경력이 얼마 없지만, 그사이 이상한 충돌 현상을 겪은 것이 서너 번 정도 되는 것 같습니다.

예를 들어, WSL + Ubuntu 20.04가 설치된 환경에서 python 3.8.10을 설치 후 Flask와, Flask-Migrate를 설치하면,

$ python3 -m pip install Flask==2.2.2
$ python3 -m pip install Flask-Migrate==3.1.0

지정한 버전 그대로 설치가 됩니다. 그런데, container 이미지인 "python:3.8-slim-buster"로 구성한 환경(파이썬 버전 3.8.12)에서 위의 설치 명령을 실행하면, Flask-Migrate 설치 과정에서 아래와 같이 Flask를 2.3.2 버전으로 업데이트를 해버립니다.

# python3 -m pip install Flask==2.2.2
# pip install Flask-Migrate==3.1.0
Requirement already satisfied: Flask-Migrate==3.1.0 in /usr/local/lib/python3.8/site-packages (3.1.0)
Requirement already satisfied: Flask>=0.9 in /usr/local/lib/python3.8/site-packages (from Flask-Migrate==3.1.0) (2.2.2)
...[생략]...
Installing collected packages: Flask
  Attempting uninstall: Flask
    Found existing installation: Flask 2.2.2
    Uninstalling Flask-2.2.2:
      Successfully uninstalled Flask-2.2.2
Successfully installed Flask-2.3.2

출력을 보면, 분명히 "Requirement already satisfied: Flask>=0.9"라고 해서 조건을 만족하는 것으로 나오는데 새롭게 2.3.2 버전을 설치하고 있습니다. 여기서 문제는, 위와 같은 조건의 환경에서 Flask App을 실행하면 이런 예외가 발생하면서 Flask 환경 구성에 실패한다는 점입니다.

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',

해결 방법은, 설치 순서를 바꾸면 됩니다. ^^;

# 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




관련해서 검색해 보면,

Flask AttributeError: module 'flask.json' has no attribute 'JSONEncoder'
; https://stackoverflow.com/questions/76107450/flask-attributeerror-module-flask-json-has-no-attribute-jsonencoder/76325779#76325779

이 문제가 Flask-WTF 모듈과도 연관이 있다고 나옵니다. 따라서 만약 Flask-Migrate가 원하는 대로 2.3.2 버전의 Flask 업데이트 상황에서도 정상적으로 사용하고 싶다면 Flask-WTF 모듈을 1.1.1 버전 이상으로 업데이트하면 됩니다.

# 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




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/20/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  [174]  175  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
703정성태4/18/200925134        답변글 .NET Framework: 126.6. CAG - Tabbed MDI Shell 적용파일 다운로드1
697정성태4/13/200929429    답변글 .NET Framework: 126.4. CAG - Unity 컨테이너 사용 [1]파일 다운로드1
698정성태4/15/200928647    답변글 .NET Framework: 126.5. CAG에 MVVM 패턴 적용 (1) [2]파일 다운로드1
686정성태4/4/200950270웹: 11. IE 8 - TabProcGrowth 레지스트리 키 [2]
685정성태4/3/200950950개발 환경 구성: 38. Hyper-V 사용 후기 [5]
684정성태4/2/200925584오류 유형: 74. IE 8 설치 이후, VS.NET 위저드 화면 동작 오류
683정성태3/28/200932353디버깅 기술: 26. 보호 모드로 응용 프로그램 디버깅하는 방법 - 두 번째 이야기 [3]
682정성태3/27/200929395디버깅 기술: 25. 보호 모드로 응용 프로그램 디버깅하는 방법 [2]
681정성태3/23/200926466오류 유형: 73. SQL Server 2008 Express 설치 오류
680정성태3/21/200926431.NET Framework: 125. WPF - RadioButton에 대한 데이터바인딩(2) [1]파일 다운로드1
679정성태3/15/200921352오류 유형: 72. IE 8 멈춤 현상 - 두 번째 이야기
678정성태3/15/200926656개발 환경 구성: 37. Hyper-V에서 Vista의 Virtual Machine Bus 장치 인식 문제
677정성태3/15/200927087개발 환경 구성: 36. MSI P45 Neo3-FR V2 - RAID 1 구성
997정성태2/26/201122530    답변글 개발 환경 구성: 36.1. 개발 환경 구성: 34 - 1. RAID 1 구성 이후...
676정성태3/15/200923817오류 유형: 71. IE 8 RC1 - 멈춤 현상
675정성태3/14/200926631오류 유형: 70. Virtual Machine Additions 제거
673정성태3/11/200925205웹: 10. 금일 진행되었던 마이크로소프트 IE 8 행사의 ActiveX 세션 PPT [6]파일 다운로드1
672정성태3/1/200938348Windows: 43. Loopback network adapter 설치하기 [2]
670정성태2/22/200931695.NET Framework: 124. IIS 7에서 SVC 호스팅 [1]
669정성태2/21/200925907오류 유형: 69. The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service.
668정성태2/21/200931046개발 환경 구성: 35. SQL Express 버전과 User Instance 옵션
667정성태2/14/200942905웹: 9. IE 7. IWebBrowser2 인터페이스 메서드의 Navigate / Navigate2 차이점 [3]파일 다운로드1
666정성태2/12/200929086웹: 8. IE 8: 프로세스와 윈도우의 관계 - LCIE [1]파일 다운로드1
665정성태2/7/200925866웹: 7. Internet Explorer 8 - XHR, XDR, XST, XSRF [1]
664정성태2/5/200921859Windows: 42. Concurrency Runtime
663정성태2/5/200926431.NET Framework: 123. WPF - Arial Narrow 폰트 문제
... 166  167  168  169  170  171  172  173  [174]  175  176  177  178  179  180  ...