[英]Flask app has ModuleNotFoundError when using Alpine, nginx, and uwsgi.. but with flask run it works fine
我编写了一个小烧瓶应用程序,它使用flask run
在我的 Windows 10 桌面上运行良好,并且使用flask run
在 Alpine Linux 3.14 Docker 容器上flask run
,但是当我使用 nginx 和 uwsgi 时,我收到一个ModuleNotFoundError: No module named '_cffi_backend'
错误。 我已经浏览了所有其他符合此描述的关于 stackoverflow 的文章,但无济于事。
从python --version
我正在运行Python 3.9.7
,它是使用来自 Docker Hub 的官方python:3.9-alpine3.14
容器安装的。 我还添加了以下apk add --no-cache python3-dev gcc libc-dev libffi-dev uwsgi-python3 jpeg-dev zlib-dev git nano
这是 uwsgi 日志中的完整错误
uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
spawned uWSGI master process (pid: 109)
spawned uWSGI worker 1 (pid: 110, cores: 2)
spawned uWSGI worker 2 (pid: 111, cores: 2)
bcrypt is required to use Flask-Bcrypt
Traceback (most recent call last):
File "/app/./run.py", line 4, in <module>
from ticketsapi import create_app
File "/app/./ticketsapi/__init__.py", line 8, in <module>
from flask_bcrypt import Bcrypt
File "/usr/local/lib/python3.9/site-packages/flask_bcrypt.py", line 27, in <module>
raise e
File "/usr/local/lib/python3.9/site-packages/flask_bcrypt.py", line 24, in <module>
import bcrypt
File "/usr/local/lib/python3.9/site-packages/bcrypt/__init__.py", line 25, in <module>
from . import _bcrypt # type: ignore
ModuleNotFoundError: No module named '_cffi_backend'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. GAME OVER ***
SIGINT/SIGQUIT received...killing workers...
Exception ignored in: <module 'threading' from '/usr/lib/python3.9/threading.py'>
Traceback (most recent call last):
File "/app/./run.py", line 4, in <module>
Traceback (most recent call last):
File "/usr/lib/python3.9/threading.py", line 1388, in _shutdown
from ticketsapi import create_app
File "/app/./ticketsapi/__init__.py", line 7, in <module>
from playhouse.flask_utils import FlaskDB
File "/usr/local/lib/python3.9/site-packages/playhouse/flask_utils.py", line 12, in <module>
from playhouse.db_url import connect as db_url_connect
File "/usr/local/lib/python3.9/site-packages/playhouse/db_url.py", line 7, in <module>
from playhouse.cockroachdb import CockroachDatabase
File "<frozen importlib._bootstrap>", line 1004, in _find_and_load
File "<frozen importlib._bootstrap>", line 157, in __enter__
File "<frozen importlib._bootstrap>", line 196, in _get_module_lock
KeyboardInterrupt
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. GAME OVER ***
def _shutdown():
KeyboardInterrupt:
pip freeze 的输出
backports.entry-points-selectable==1.1.0
bcrypt==3.2.0
blinker==1.4
certifi==2021.10.8
cffi==1.15.0
click==8.0.3
cryptography==35.0.0
distlib==0.3.3
dnspython==2.1.0
email-validator==1.1.3
filelock==3.3.1
Flask==2.0.2
Flask-Bcrypt==0.7.1
Flask-Login==0.5.0
Flask-Mail==0.9.1
Flask-WTF==0.15.1
idna==3.3
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
peewee==3.14.4
Pillow==8.4.0
platformdirs==2.4.0
pycparser==2.20
PyMySQL==1.0.2
python-dotenv==0.19.1
six==1.16.0
supervisor==4.2.2
virtualenv==20.9.0
Werkzeug==2.0.2
WTForms==2.3.3
我的 nginx 配置文件
server {
listen 5000;
location /static {
alias /app/ticketsapi/static;
}
location / {
uwsgi_pass unix:///app/socket/uwsgi.sock;
include /etc/nginx/uwsgi_params;
# proxy_redirect off;
}
}
我的 uwsgi ini
## Application
##
module = run:app
chdir=/app
socket = /app/socket/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 777
processes = 5
threads = 2
## General
##
strict = true
master = true
enable-threads = true
vacuum = true
single-interpreter = true
die-on-term = true
need-app = true
lazy-apps = true
我一直在努力解决这个问题几天了,我很难过。 如何解决此错误并继续我的项目?
通过查看各种日志,我注意到其中引用了两个略有不同的 Python 版本,即 3.9.5 和 3.9.7。
虽然我使用的是 Alpine Linux 3.14,但我使用这个Digital Ocean 教程通过使用 Python 虚拟环境 (venv) 来解决我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.