Flask AttributeError:模块'app'没有属性'run'

新手上路,请多包涵

我的 Flask 项目结构如下:

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

应用程序/__init__.py

 from flask import Flask

app = Flask(__name__)

app.config.from_object('config')

运行.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__': 块产生相同的结果。是什么导致了这个问题?

原文由 rasmi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

我通过将 app 目录重命名为其他名称(例如 webapp )解决了这个问题。使用 from webapp import app 就可以了。这似乎是因为 包目录名称在导入时优先于模块名称。也许使用 __path__ 可以解决这个问题。

原文由 rasmi 发布,翻译遵循 CC BY-SA 3.0 许可协议

我通过在我的 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

原文由 ProgrammingPete 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题