You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask+Gunicorn部署配置supervisor时No module found异常求助

Flask + Supervisor 部署报错:找不到flask模块

问题描述

开发Flask应用后尝试部署到Linux服务器,参照官方部署文档操作时,在supervisor配置环节遇到阻塞。
当前环境为Python 3.7版本虚拟环境,已安装全部项目依赖,手动激活虚拟环境后执行以下命令可正常启动服务:

source venv/bin/activate
gunicorn -w 3 flask_app:app

按照文档指引在虚拟环境内通过pip安装supervisor,完成配置后启动服务抛出如下错误:

[2022-06-06 02:44:54 +0000] [9205] [INFO] Using worker: sync
[2022-06-06 02:44:54 +0000] [9209] [INFO] Booting worker with pid: 9209
[2022-06-06 02:44:54 +0000] [9209] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 129, in init_process
    self.load_wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
    return self.load_wsgiapp()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 375, in import_app
    __import__(module)
  File "/var/www/app/__init__.py", line 3, in <module>
    from app.db import db_session
  File "/var/www/app/db.py", line 1, in <module>
    from flask import current_app, g
ImportError: No module named flask

故障原因

报错日志明确显示,supervisor启动时调用了系统Python 2.7路径下的全局gunicorn,没有加载项目Python 3.7虚拟环境的依赖,因此抛出找不到flask模块的错误。

解决步骤

  • 首先获取虚拟环境内gunicorn的绝对路径,进入项目根目录执行如下命令,记录输出的路径:
readlink -f venv/bin/gunicorn
  • 编辑supervisor对应的项目配置文件(通常存放在/etc/supervisor/conf.d/目录下,以.conf为后缀),调整配置:
    1. command项直接使用刚才查到的gunicorn绝对路径,不要写source venv/bin/activate && gunicorn这类shell激活命令,supervisor不会加载shell交互环境,这类写法无法正常生效
    2. 显式在配置中添加虚拟环境的环境变量,指定PATH优先级
      参考配置如下,替换成自己的项目实际路径即可:
[program:flask_app]
command=/var/www/your_project/venv/bin/gunicorn -w 3 flask_app:app
directory=/var/www/your_project
user=www-data
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/flask_app/gunicorn.log
environment=PATH="/var/www/your_project/venv/bin",VIRTUAL_ENV="/var/www/your_project/venv"
  • 保存配置后,重新加载supervisor配置并重启服务:
supervisorctl reread
supervisorctl update
supervisorctl restart flask_app
  • 校验启动结果:执行ps aux | grep gunicorn查看进程启动路径,确认gunicorn是从虚拟环境目录启动、没有调用系统Python2.7路径下的版本,即修复完成。

补充说明:不建议在虚拟环境内安装supervisor,直接用系统包管理器安装全局supervisor即可,只要配置中指定了虚拟环境内的gunicorn路径和环境变量,就不会出现环境混用的问题。

内容的提问来源于stack exchange,提问作者Stefan Radonjic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:06:19