Flask AttributeError: module 'app' has no attribute 'run'

Flask AttributeError: module 'app' has no attribute 'run'

我的 Flask 项目结构如下:

my_project
│
├── app
│   ├── __init__.py
│   ├── api
│   ├── static
│   └── templates
├── config.py
└── run.py

app/__init__.py:

from flask import Flask

app = Flask(__name__)

app.config.from_object('config')

run.py

from app import app

app.run(
    host=app.config.get('HOST', '0.0.0.0'),
    port=app.config.get('PORT', 5000)
)

这以前有效,但我正在尝试将我的项目从 Python 2 迁移到 Python 3,并且 运行 python run.py 不再有效。我收到以下错误:

Traceback (most recent call last):
  File "/Users/rasmi/Projects/my_project/run.py", line 3, in <module>
    app.run(
AttributeError: module 'app' has no attribute 'run'

如果我更改 run.py 中的导入样式以匹配 :

from .app import app

app.run(
    host=app.config.get('HOST', '0.0.0.0'),
    port=app.config.get('PORT', 5000)
)

我得到一个不同的错误:

Traceback (most recent call last):
  File "/Users/rasmi/Projects/my_project/run.py", line 1, in <module>
    from .app import app
ModuleNotFoundError: No module named '__main__.app'; '__main__' is not a package

将我的 app.run() 调用包装在 if __name__ == '__main__': 块中会产生相同的结果。是什么导致了这个问题?

我通过将 app 目录重命名为其他名称(例如 webapp)解决了这个问题。使用 from webapp import app 就可以了。这似乎是因为package directory names take precedence over module names when importing。也许使用 __path__ 可以解决这个问题。

我的应用中的下一行遇到了同样的问题,

import app.main.constant.constants as Constants

但后来我将上面的命令重组为下面的命令,它对我有用。

from app.main.constant import constants as Constants

我在 runserver.py:

中这样做解决了这个问题
from WebApp import app 
app.app.run(debug=True)

其中包的名称是 Webapp。注意我是如何使用 app 两次的。另外,我的 Flask 应用名为 app.

├── WebApp
│   ├── app.py
│   ├── authentication.py
│   ├── __init__.py
│   ├── models.py
├── runserver.py

你能把你的 from app import app1 改成 from app import * 吗?

对我有用

<code>
├── app
│   ├── __init__.py
│   ├── viewss.py
├── run.py
</code>

我试图在 run.py

中从 app/init__.py 导入应用程序