Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

uwsgi-plugin-python3 환경에서 "ModuleNotFoundError: No module named 'django'" 오류 발생

희한하군요. ^^; 지난번 글에 따라,

WSL Ubuntu 20.04에서 파이썬을 위한 uwsgi 설치 방법
; https://www.sysnet.pe.kr/2/0/12857

이번에는 docker에서 실습을 해봤습니다. "python:3.8-slim-buster" 이미지를 기반으로 환경 구성 후,

C:\temp> docker run -p 18000:18000/tcp -v /d/temp/testprj/myapp:/app/myapp_root --name python38_uwsgi_demo_myapp --rm -it python:3.8-slim-buster /bin/bash

# apt update
# apt upgrade -y
# apt install python3-pip -y

# apt install uwsgi-core -y
# apt install uwsgi-plugin-python3 -y

# pip install django

uwsgi를 실행했는데,

# cd /app/myapp_root

# uwsgi --plugin /usr/lib/uwsgi/plugins/python3_plugin.so  --http-socket :18000 --wsgi-file ./myapp/wsgi.py
*** Starting uWSGI 2.0.18-debian (64bit) on [Mon Dec 13 08:46:12 2021] ***
compiled with version: 8.2.0 on 10 February 2019 02:42:46
os: Linux-5.10.76-linuxkit #1 SMP Mon Nov 8 10:21:19 UTC 2021
nodename: 95d2ed822c69
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /app/build_root
detected binary path: /usr/bin/uwsgi-core
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** WARNING: you are running uWSGI without its master process manager ***
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :18000 fd 3
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
Python version: 3.7.3 (default, Jan 22 2021, 20:04:44)  [GCC 8.3.0]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x559217e27b60
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72920 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
Traceback (most recent call last):
  File "./myapp/wsgi.py", line 17, in <module>
    from django.core.wsgi import get_wsgi_application
ModuleNotFoundError: No module named 'django'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 1898, cores: 1)

재미있는 것은, 시스템의 python은 3.8.12 버전인데 uwsgi의 출력에는 3.7.3이라고 나온다는 점입니다. 아마도 제 짐작으로는 "uwsgi-plugin-python3" 모듈이 내부적으로 파이썬 런타임 환경을 제공하는 것이 아닌가... 싶은데 혹시 아시는 분은 덧글 부탁드립니다. ^^

그나저나... 이 문제를 어떻게 해결해야 할지 모르겠군요. 일단, 이 상황에서 sys.path를 출력해 보면 다음의 결과를 얻습니다.

['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload']

그리고 "pip install django"가 설치된 경로는 '/usr/local/lib/python3.8/site-packages'인데, 이걸 그냥 추가해 주면 될까요? ^^

# wsgi.py

import sys
sys.path.append('/usr/local/lib/python3.8/site-packages')
print(sys.path)

그랬더니, 이번에는 다음과 같은 식의 오류가 발생합니다.

Traceback (most recent call last):
  File "./myapp/wsgi.py", line 21, in <module>
    from django.core.wsgi import get_wsgi_application
  File "/usr/local/lib/python3.8/site-packages/django/core/wsgi.py", line 2, in <module>
    from django.core.handlers.wsgi import WSGIHandler
  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/wsgi.py", line 5, in <module>
    from django.core.handlers import base
  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 11, in <module>
    from django.urls import get_resolver, set_urlconf
  File "/usr/local/lib/python3.8/site-packages/django/urls/__init__.py", line 1, in <module>
    from .base import (
  File "/usr/local/lib/python3.8/site-packages/django/urls/base.py", line 8, in <module>
    from .exceptions import NoReverseMatch, Resolver404
  File "/usr/local/lib/python3.8/site-packages/django/urls/exceptions.py", line 1, in <module>
    from django.http import Http404
  File "/usr/local/lib/python3.8/site-packages/django/http/__init__.py", line 5, in <module>
    from django.http.response import (
  File "/usr/local/lib/python3.8/site-packages/django/http/response.py", line 16, in <module>
    from django.core.serializers.json import DjangoJSONEncoder
  File "/usr/local/lib/python3.8/site-packages/django/core/serializers/__init__.py", line 23, in <module>
    from django.core.serializers.base import SerializerDoesNotExist
  File "/usr/local/lib/python3.8/site-packages/django/core/serializers/base.py", line 8, in <module>
    from django.db import models
  File "/usr/local/lib/python3.8/site-packages/django/db/models/__init__.py", line 3, in <module>
    from django.db.models.aggregates import *  # NOQA
  File "/usr/local/lib/python3.8/site-packages/django/db/models/aggregates.py", line 63
    if (default := c.default) is None:
                ^
SyntaxError: invalid syntax

일단, django는 정상적으로 올라온 것 같은데, "/usr/local/lib/python3.8/site-packages/django/db/models/aggregates.py" 파일에 있는 "if (default := c.default) is None:" 문장에서 ":=" 기호가 python 3.8에만 추가되었기 때문에 오류가 발생했습니다.

파이썬 3.8의 새로운 기능
; https://docs.python.org/ko/3/whatsnew/3.8.html

이름이 바다코끼리 연산자(the walrus operator)라는군요. ^^

자, 그렇다면 이 오류를 회피하기 위해 아마도 파이썬 3.8 구문을 사용하지 않는 Django 버전을 설치하면 될 텐데요, 따라서 pip install을 이렇게 주면 해결이 됩니다.

# pip install django==3.2.6

그런데, 이렇게 해도 불안 요소가 있습니다. 그건 다음 기회에! ^^;




참고로, 이런 식의 문제 때문에라도 그냥 "pip install uwsgi"로 설치하는 방식이 더 낫습니다.




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 12/19/2021]

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

비밀번호

댓글 작성자
 




... 121  122  123  [124]  125  126  127  128  129  130  131  132  133  134  135  ...
NoWriterDateCnt.TitleFile(s)
10822정성태7/7/201527280오류 유형: 299. The 'Visual C++ Project System Package' package did not load correctly.
10821정성태7/7/201519530오류 유형: 298. Unable to start debugging on the web server. IIS does not list a web site that matches the launched URL.
10820정성태7/7/201525486오류 유형: 297. HTTP Error 503. The service is unavailable. - 두 번째
10819정성태7/2/201528940오류 유형: 296. SQL Server Express 시작 오류 - error code 3417
10818정성태7/1/201527742오류 유형: 295. HTTP Error 503. The service is unavailable. [1]
10817정성태6/29/201531449.NET Framework: 523. C# 람다(Lambda)에서 변수 캡처 방식 [3]
10816정성태6/25/201527791.NET Framework: 522. 닷넷의 어셈블리 서명 데이터 확인 방법파일 다운로드1
10815정성태6/23/201525628Graphics: 1. 자네 나와 함께... UNITY 하지 않겠는가! [4]
10814정성태6/22/201523417.NET Framework: 521. Roslyn을 이용해 C# 문법 변형하기 (2) [5]
10813정성태6/21/201525192.NET Framework: 520. Roslyn을 이용해 C# 문법 변형하기 (1)
10812정성태6/20/201526316.NET Framework: 519. C# 6.0 오픈 소스 컴파일러 Roslyn - 빌드 및 테스트 방법 [1]
10811정성태6/20/201523167오류 유형: 294. OpenAuth 사용 시 System.Data.SqlClient.SqlException 예외가 Output 창에 출력되는 문제
10810정성태6/18/201522155개발 환경 구성: 270. Visual Studio에서 github 오픈 소스를 fork해서 테스트하는 방법 [1]
10809정성태6/18/201520119.NET Framework: 518. AllowPartiallyTrustedCallers 특성이 적용된 GAC 어셈블리에서 DynamicMethod의 calli 명령어 사용파일 다운로드1
10808정성태6/17/201522485.NET Framework: 517. calli IL 호출이 DllImport 호출보다 빠를까요? [1]파일 다운로드1
10807정성태6/16/201523555.NET Framework: 516. Microsoft.AspNet.Membership.OpenAuth 사용 시 "Local Database Runtime error occurred" 오류
10806정성태6/16/201541419.NET Framework: 515. OpenAuth.VerifyAuthentication 호출 시 The remote server returned an error: (400) Bad Request
10805정성태6/15/201522742Java: 17. 자바의 재미있는 상수 처리 방식
10804정성태6/10/201522386.NET Framework: 514. .NET CLR2 보안 모델에서의 APTCA 역할 (2)파일 다운로드1
10803정성태6/2/201524336.NET Framework: 513. UWP(Universal Windows Platform) 응용 프로그램의 새로운 라이브러리 버전 관리 해법 [2]
10802정성태6/2/201524376개발 환경 구성: 269. 마이크로소프트 온라인 강좌 소개 - Azure VPN 구성 방법 [1]
10801정성태5/31/201528925.NET Framework: 512. async/await 사용 시 hang 문제가 발생하는 경우 - 두 번째 이야기 [3]
10800정성태5/29/201524380개발 환경 구성: 268. 소개 - 프로세싱(https://processing.org/)
10799정성태5/29/201522155사물인터넷: 3. 책 소개 - 라즈베리 파이로 구현하는 사물 인터넷 프로젝트 [1]
10798정성태5/26/201521898기타: 53. 2015년 6월 10일 밤 10시 온라인 세미나 - 새로운 Windows 10 App을 개발하는 방법
10797정성태5/23/201521575VC++: 91. 자식 스레드에 자동 상속되는 TEB의 SubProcessTag 필드파일 다운로드1
... 121  122  123  [124]  125  126  127  128  129  130  131  132  133  134  135  ...