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

时间:2017-01-14 23:34:28

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

My Flask项目的结构如下:

my_project
│
├── app
│   ├── __init__.py
│   ├── api
│   ├── static
│   └── templates
├── config.py
└── run.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__':块中会产生相同的结果。是什么导致了这个问题?

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

导入应用时摆脱.并在if __name__ == '__main__':中运行应用。

<强> run.py

from app import app

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

命令行

my_project$ python run.py

此外,如果您使用的是virtualenv,请确保使用的是预期的Python:

my_project$ which python; python --version

如果您有*.pyc个文件,请尝试删除这些文件。

答案 2 :(得分:0)

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

import app.main.constant.constants as Constants

但是随后我将上面的命令重组为下面的命令,并且对我有用。

from app.main.constant import constants as Constants

答案 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