【问题标题】:Flask AttributeError: module 'app' has no attribute 'run'Flask AttributeError:模块'app'没有属性'run'
【发布时间】:2017-05-30 02:21:20
【问题描述】:

我的 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 中的导入样式以匹配here

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

【问题讨论】:

    标签: python python-2.7 python-3.x flask python-import


    【解决方案1】:

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

    对我有用

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

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        【解决方案3】:

        我在我的应用程序中遇到了同样的问题,

        import app.main.constant.constants as Constants
        

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

        from app.main.constant import constants as Constants
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2019-09-06
            • 1970-01-01
            • 2019-03-18
            • 2016-12-26
            • 2020-02-04
            • 1970-01-01
            • 2016-02-23
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多