使用uWSGI启动Flask应用时遇ImportError: No module named 'myapp'求助
解决uWSGI加载Flask应用时的
ImportError: No module named 'myapp'问题 嘿,我之前也碰到过一模一样的问题,咱们来一步步搞定它!从你的报错信息和项目结构来看,核心问题就是uWSGI启动时的工作目录没选对,或者Python找不到你的myapp模块所在的路径,导致import失败。
下面给你几个靠谱的解决方案,按优先级来试:
方案1:修改uWSGI配置文件(最规范的解决方式)
打开你的project.ini,补充或调整以下配置项:
[uwsgi] module = wsgi:app master = true # 关键:改成你的myapp目录的父目录路径(比如myapp在/home/ubuntu/myapp,这里就写/home/ubuntu) chdir = /path/to/parent-folder-of-myapp # 把父目录添加到Python的搜索路径里 pythonpath = /path/to/parent-folder-of-myapp # 你的其他原有配置可以保留,比如: processes = 4 threads = 2 socket = myapp.sock chmod-socket = 660 vacuum = true die-on-term = true
为啥要这么改?
chdir:让uWSGI启动后自动切换到指定目录,这样Python就能在这个目录下找到myapp这个模块文件夹了pythonpath:手动把目录添加到Python的sys.path里,确保import语句能定位到模块
方案2:临时调整wsgi.py(应急用)
如果暂时不想改配置文件,可以修改wsgi.py,手动把项目路径加入Python搜索路径:
import sys import os # 把当前文件所在目录的父目录添加到sys.path最前面 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from myapp import app if __name__ == "__main__": app.run(debug=True)
不过这个方案属于临时 workaround,长期来看还是方案1更规范。
方案3:检查__init__.py的内容
别忘了确认myapp/__init__.py里正确创建了Flask的app实例,比如:
from flask import Flask # 必须要有这个app实例,不然wsgi.py里import会找不到 app = Flask(__name__) # 可以加个测试路由验证 @app.route('/') def hello(): return "搞定啦!Flask应用正常加载~"
如果__init__.py里没定义app,那就算路径对了也会报错。
验证是否解决问题
修改完配置或代码后,重启uWSGI服务:
uwsgi --ini project.ini
如果还是有问题,可以先手动测试Python导入是否正常:
cd /path/to/parent-folder-of-myapp python3 -c "from myapp import app; print('App加载成功!')"
如果这个命令能正常输出,说明Python路径没问题,那就是uWSGI的配置没生效;如果这个命令也报错,那就要检查项目结构或__init__.py的内容了。
内容的提问来源于stack exchange,提问作者TheLettuceMaster
相关产品推荐
相关产品推荐

