导入错误:无法在 wsgi 文件中导入名称"应用程序"



所以我在apache服务器上运行了一个flask应用程序,一切都很好。我决定重新启动服务器(sudo服务apache2重新启动(,由于某种原因,当我尝试访问IP时,这导致了以下错误:

File "/var/www/WebApp/webapp.wsgi", line 7, in <module>
from WebApp import app as application
ImportError: cannot import name 'app'

然而,我从未更改过wsgi文件中的任何内容,也从未移动过任何文件或目录的位置。

这是我的wsgi文件:

#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/var/www/WebApp/")
from WebApp import app as application

这是我的应用程序的结构(位于/var/www/(:

WebApp
├── WebApp
│   ├── README.md
│   ├── app.py
│   └── website
│       ├── __init__.py
│       ├── auth.py
│       ├── database.db
│       ├── models.py
│       ├── static
│       │   ├── style.css
│       │   └── index.js
│       └── templates
│           ├── base.html
│           ├── home.html
│           ├── login.html
│           ├── register.html
└── webapp.wsgi

我已尝试将进口行更改为

from WebApp.app import app as application (says no module named WebApp.app)
from app import app as application
from .WebApp import app as application
from .WebApp.app import app as application
import app as application

它们都不起作用。再说一次,我的wsgi文件在昨晚开始失败之前已经工作了好几天。我还试着做chmod a+x webapp.wsgi.

有人对如何解决这个问题有什么建议吗?

注意:我知道这里有一个非常类似的堆栈溢出问题,但唯一的答案是建议添加一个init.py文件,我已经有了这个文件。此外,服务器在能够执行wsgi之外的任何文件之前就会崩溃。

发生这种情况时,它是一个隐藏详细信息的异常处理程序。如果你从Python外壳导入应用程序的根(在虚拟环境中,如果你正在使用的话(,就会发现更多。在这里,我在我的一个应用程序中强制出现错误:

(venv) $ python
Python 3.6.9 (default, Jan 26 2021, 15:33:00) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import wsgi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/vagrant/toydeploy/wsgi.py", line 3, in <module>
app = create_app()
File "/home/vagrant/toydeploy/app/__init__.py", line 62, in create_app
from app.errors import bp as errors_bp  # noqa
File "/home/vagrant/toydeploy/app/errors/__init__.py", line 6, in <module>
from app.errors import handlers  # noqa
File "/home/vagrant/toydeploy/app/errors/handlers.py", line 6, in <module>
oops
NameError: name 'oops' is not defined
>>> 

安装和使用flake8是及早发现问题的另一种方法。

最新更新