首页 > 解决方案 > Python烧瓶蓝图ImportError:无法导入名称'bp'

问题描述

我正在尝试让我的登录页面使用蓝图。在我将我的 python 包分成单独的包之前,该应用程序仅使用 app.py 即可成功运行。但是,现在我正在尝试使其更加模块化,我在运行应用程序时遇到了问题,并且它不允许我导入blueprint我创建的。

我的文件结构是这样的:

myapp/
run.py
myapp/
    __init.py__
    app.py
    models.py
...

这是我的run.py

from myapp import app
app.run(host= '0.0.0.0', debug=True)

我正在app.py像这样初始化我的蓝图:

.... 
from flask import Blueprint

bp = Blueprint('bp', __name__)

@bp.route('/')
@bp.route('/home')
....

我这样称呼它__init.py__

app = Flask(__name__)
....
app.config...
app.config...
app.config...
....

from . import bp             # line 35
app.register_blueprint(bp)

但是,无论我将导入更改为什么,它都一直抱怨无法导入

# python3 run.py
Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from usb import app
  File "/my/path/to/myapp/myapp/__init__.py", line 35, in <module>
    from . import bp
ImportError: cannot import name 'bp'

我什至尝试更改from . import bpfrom myapp.app import bp,然后它会引发不同的错误AttributeError: module 'myapp.app' has no attribute 'register_blueprint'

这是完整的错误:

  Traceback (most recent call last):
  File "run.py", line 1, in <module>
    from myapp import app
  File "/my/path/to/myapp/myapp/__init__.py", line 33, in <module>
    app.register_blueprint(bp)
AttributeError: module 'myapp.app' has no attribute 'register_blueprint'

有谁知道我在这里做错了什么?

标签: python-3.xflaskimportattributeerrorblueprint

解决方案


据我了解,您需要将 from 替换为from . import bpto from myapp.app import bp。发生这种情况的原因是__init__.py,它使包来自“myapp”目录,并且 python 等待带有包名的导入路径。

这是一个小例子:项目结构:

myapp\
  myapp\
    __init__.py
    app.py
  run.py

run.py清单:

from myapp import app
app.run(host='0.0.0.0', debug=True)

myapp\__init__.py清单:

from flask import Flask
from myapp.app import bp

app = Flask(__name__)
app.register_blueprint(bp)

myapp\app.py清单:

from flask import Blueprint

@bp.route('/')
@bp.route('/home')
def home():
   return '<html><body><h1>Hello, World!</h1></body></html>'

推荐阅读