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
导入应用程序
我的 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
导入应用程序