성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[손님] 착오가 있었던 이유는 주로 Split 함수를 받는 용도로 사용하...
[정성태] 아래의 표현은 유효합니다. int[] arr = { }; ...
[손님] 제가 또 기본을 놓쳤군요 문법책을 정독을 여러 번 더 해야 겠습...
[손님] 감사 감사 해결되었습니다 아래와 같이 바꿨습니다 publi...
[손님] 이렇게 빨리 답을 주시다니 nn 즐거운 하루되세요
[정성태] Lcd 변수는 정상적으로 인스턴스가 들어 있을 것입니다. 하지만...
[손님] 총9시간의 대공사 - 은퇴해야 되는 것인가 취미로 10여년 세월...
[손님] 용량이 커서 2017을 지우고 해야 될 듯한데 repos폴더를 ...
[손님] 2017버전버그 상의 문제군요ㅜㅜ
[정성태] 글쎄요, 과거에 partial로 디자인 코드가 빠지기 전("ht...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
.NET Framework
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'>gunicorn - ModuleNotFoundError: No module named 'flask'</h1> <p> 지난 글을 통해,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Python - ImportError: cannot import name 'html5lib' from 'pip._vendor' ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/13175'>https://www.sysnet.pe.kr/2/0/13175</a> </pre> <br /> python3.11과 pip을 이용해 Flask를 설치했는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>python3.11 -m pip install Flask</span> Defaulting to user installation because normal site-packages is not writeable Collecting Flask Using cached Flask-2.2.2-py3-none-any.whl (101 kB) ...[생략]... Successfully built MarkupSafe Installing collected packages: MarkupSafe, itsdangerous, click, Werkzeug, Jinja2, Flask Successfully installed Flask-2.2.2 Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.2.2 click-8.1.3 itsdangerous-2.1.2 </pre> <br /> gunicorn 실행에서 Flask를 찾을 수 없다고 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>gunicorn --bind 0:5000 "testwebapp:create_app()"</span> [2022-11-24 14:24:42 +0900] [1459] [INFO] Starting gunicorn 20.1.0 [2022-11-24 14:24:42 +0900] [1459] [INFO] Listening at: http://0.0.0.0:5000 (1459) [2022-11-24 14:24:42 +0900] [1459] [INFO] Using worker: sync [2022-11-24 14:24:42 +0900] [1461] [INFO] Booting worker with pid: 1461 [2022-11-24 14:24:42 +0900] [1461] [ERROR] Exception in worker process Traceback (most recent call last): File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker worker.init_process() File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 134, in init_process self.load_wsgi() File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi self.wsgi = self.app.wsgi() File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi self.callable = self.load() File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 58, in load return self.load_wsgiapp() File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp return util.import_app(self.app_uri) File "/home/testusr/.local/lib/python3.8/site-packages/gunicorn/util.py", line 359, in import_app mod = importlib.import_module(module) File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 848, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/testprj/latest_flask/testwebapp/__init__.py", line 2, in <module> from flask import Flask, render_template ModuleNotFoundError: No module named 'flask' [2022-11-24 14:24:42 +0900] [1461] [INFO] Worker exiting (pid: 1461) [2022-11-24 14:24:42 +0900] [1459] [INFO] Shutting down: Master [2022-11-24 14:24:42 +0900] [1459] [INFO] Reason: Worker failed to boot. </pre> <br /> 왜냐하면 gunicorn도 python 버전에 종속돼 있기 때문입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>which gunicorn</span> /home/testusr/.local/bin/gunicorn $ <span style='color: blue; font-weight: bold'>cat ~/.local/bin/gunicorn</span> #!/usr/bin/<span style='color: blue; font-weight: bold'>python3</span> # -*- coding: utf-8 -*- import re import sys from gunicorn.app.wsgiapp import run if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(run()) </pre> <br /> shebang으로 분명히 "#!/usr/bin/python3"을 가리키고 있습니다. 그렇다고 shebang을 변경한다고 해서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>cat ~/.local/bin/gunicorn3.11</span> #!/usr/bin/<span style='color: blue; font-weight: bold'>python3.11</span> # -*- coding: utf-8 -*- import re import sys from gunicorn.app.wsgiapp import run if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(run()) </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;' > $ <span style='color: blue; font-weight: bold'>gunicorn --bind 0:5000 "testwebapp:create_app()"</span> Traceback (most recent call last): File "/home/testusr/.local/bin/gunicorn", line 5, in <module> from gunicorn.app.wsgiapp import run ModuleNotFoundError: No module named 'gunicorn' </pre> <br /> 애당초 gunicorn은 파이썬 모듈로 설치되기 때문입니다. 따라서, 저렇게 shebang만 고친 파일이 아닌, python3.11에 gunicorn을 별도로 설치해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>python3.11 -m pip install gunicorn</span> </pre> <br /> 그럼, 기존의 "~/.local/bin/gunicorn" 파일을 덮어쓰는 부작용이 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>cat ~/.local/bin/gunicorn</span> #!/usr/bin/<span style='color: blue; font-weight: bold'>python3.11</span> # -*- coding: utf-8 -*- import re import sys from gunicorn.app.wsgiapp import run if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(run()) </pre> <br /> 어쩔 수 없습니다. 버전 별로 필요하다면 파일을 별도로 만들어 두어야 합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1768
(왼쪽의 숫자를 입력해야 합니다.)