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

8
我的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__':块中会产生相同的结果。是什么引起了这个问题?
4个回答

15

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


2

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

1

我在我的应用程序中遇到了与以下行相同的问题,

import app.main.constant.constants as Constants

但是我将上面的命令重构为下面的形式,这样它对我起作用了。

from app.main.constant import constants as Constants

0

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

这对我起作用了。

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

我尝试在 run.py 中从 app/init__.py 导入应用程序


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接