【解决方法】Docker+uWSGI+Flask 报错 ModuleNotFoundError: No module named ‘flask‘
背景Docker + Nginx + uWSGI + Flask 部署的环境,以前一直都能好好跑,这次把基础镜像的 Python 版本由原来的 3.6 升级到了 3.8,就报了标题的错。Docker + Nginx + uWSGI + Flask 部署可以参考 这篇文章问题分析先看一下 Docker 的启动日志:Starting nginx: nginx.,*** Starting uWSGI 2
·
背景
Docker
+ Nginx
+ uWSGI
+ Flask
部署的环境,以前一直都能好好跑,这次把基础镜像的 Python
版本由原来的 3.6
升级到了 3.8
,就报了标题的错。
Docker
+Nginx
+uWSGI
+Flask
部署可以参考 这篇文章
问题分析
先看一下 Docker 的启动日志:
Starting nginx: nginx.,
*** Starting uWSGI 2.0.18-debian (64bit) on [Tue Aug 17 02:21:46 2021] ***,
[uWSGI] getting INI configuration from uwsgi.ini,
compiled with version: 8.2.0 on 10 February 2019 02:42:46,
os: Linux-3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018,
nodename: 9c8cc3ffd4ed,
machine: x86_64,
pcre jit disabled,
detected number of CPU cores: 2,
clock source: unix,
current working directory: /code,
detected binary path: /usr/bin/uwsgi-core,
uWSGI running as root, you can use --uid/--gid/--chroot options,
chdir() to /code,
*** 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 :5000 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 main interpreter initialized at 0x55fa4f5a8990,
uWSGI running as root, you can use --uid/--gid/--chroot options,
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** ,
python threads support enabled,
your server socket listen backlog is limited to 100 connections,
your mercy for graceful operations on workers is 60 seconds,
mapped 825016 bytes (805 KB) for 8 cores,
*** Operational MODE: preforking+threaded ***,
Traceback (most recent call last):,
File "run.py", line 20, in <module>,
from server import create_app,
File "./server/__init__.py", line 14, in <module>,
from flask import Flask,
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 (pid: 21, cores: 2),
spawned uWSGI worker 2 (pid: 22, cores: 2),
spawned uWSGI worker 3 (pid: 23, cores: 2),
spawned uWSGI worker 4 (pid: 24, cores: 2)
从中可以看出来,就是在引用 flask
的时候报错了。
那什么原因会导致这个问题呢?
就是程序在跑起来的时候没有找到 python 库(flask),就报错了。
这里咱们先不管他为什么没找到,既然没找到的话,那我们就主动告诉他去哪找就行了。
解决方案
修改 uwsgi.ini
,设定 pythonpath
的值为 /usr/local/lib/python3.8/site-packages/
。
修改后的 uwsgi.ini
文件内容为:
[uwsgi]
chdir = /code
socket = :5000
pythonpath = /usr/local/lib/python3.8/site-packages/
wsgi-file = run.py
callable = app
chmod-socket = 666
plugins = python3
buffer-size = 65535
processes = 4
threads = 2
好了,问题解决。
其他问题
好了,解决了能跑的问题,还有一个比较重要的问题,为什么不能跑呢?
之前在 Python3.6
的容器里面都能直接跑,为什么在 Python3.8
的容器里面就需要指定 PYTHONPATH
呢?
还望大佬不吝赐教。
以上。
祝大家变的更强。
更多推荐
已为社区贡献2条内容
所有评论(0)