Apache重启后Flask项目wsgi报错cannot import name 'app'如何解决
解决方案
1. 补全内层WebApp包配置
你提到已存在的__init__.py位于website子目录下,而导入语句引用的内层WebApp目录本身缺少__init__.py文件,Python无法将该目录识别为可导入的包,这是核心问题。你可以二选一处理:
- 在内层
/var/www/WebApp/WebApp/目录下新建__init__.py文件,添加如下内容:
from .app import app
- 直接调整wsgi文件的导入路径,见步骤3。
2. 校验mod_wsgi Python版本匹配
重启服务后突发报错,大概率是mod_wsgi绑定的Python版本与项目依赖版本不一致:
- 执行
dpkg -l | grep libapache2-mod-wsgi查看绑定版本,输出带python3前缀为Python3,带python前缀为Python2 - 安装匹配项目对应版本的mod_wsgi:Python3环境执行
sudo apt install libapache2-mod-wsgi-py3,Python2环境执行sudo apt install libapache2-mod-wsgi - 重启Apache服务:
sudo systemctl restart apache2
3. 调整wsgi导入配置
如果不想修改包配置,直接修改webapp.wsgi内容为:
#!/usr/bin/python3 import sys import logging logging.basicConfig(stream=sys.stderr) sys.path.insert(0, "/var/www/WebApp/WebApp") from app import app as application
直接将sys.path指向存放app.py的内层目录,可正常导入app实例。
4. 校验目录权限
确认Apache运行用户对项目目录有访问权限:
sudo chown -R www-data:www-data /var/www/WebApp sudo chmod -R 755 /var/www/WebApp
修改后重启Apache验证即可。
内容的提问来源于stack exchange,提问作者JamesDockett
相关产品推荐
相关产品推荐

