【问题标题】:ImportErrors cannot import app and bcrypt from flask_app and can't import db from models.pyImportErrors 无法从 flask_app 导入 app 和 bcrypt 也无法从 models.py 导入 db
【发布时间】:2020-07-20 16:22:03
【问题描述】:
stucture of the app

flask_app
   __init__.py
   models.py
   routes.py
run.py

__init__.py

from flask import Flask
from flask_bcrypt import Bcrypt
import os
from flask_app.models import db

app = Flask(__name__)

db.init_app(app) 
bcrypt = Bcrypt(app)

from flask_app import routes     

models.py

from flask_sqlalchemy import SQLAlchemy 
from flask_app import app, bcrypt

db = SQLAlchemy()

run.py

from flask_app import app  

if __name__ == '__main__': 
  app.run(debug=True) 

 This happens first 
 Traceback (most recent call last):


File 
   "c:\users\cristovao\documents\mqs_development\flaskexperiment\env\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\run.py", line 4, in <module>
    from flask_app import app  # importing from __init__.py within flask_app package
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\__init__.py", line 6, in <module>
    from flask_app.models import db
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\models.py", line 2, in <module>
    from flask_app import app, bcrypt
ImportError: cannot import name 'app' from 'flask_app' (C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\__init__.py)

 and then in models.py after this error I write from flask__app.__init__ import app bcrypt and I got another error

    Traceback (most recent call last):
  File "c:\users\cristovao\documents\mqs_development\flaskexperiment\env\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\run.py", line 4, in <module>
    from flask_app import app  # importing from __init__.py within flask_app package
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\__init__.py", line 6, in <module>
    from flask_app.models import db
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\models.py", line 2, in <module>
    from flask_app.__init__ import app, bcrypt
  File "C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\__init__.py", line 6, in <module>
    from flask_app.models import db
ImportError: cannot import name 'db' from 'flask_app.models' (C:\Users\cristovao\Documents\MQS_Development\FlaskExperiment\flask_app\models.py)

当我使用flask run 运行我的应用程序时,它给了我那些导入错误,无法将应用程序和bcrypt 从flask_app 导入models.py,并且无法将db 从models.py 导入__init__py。我不明白为什么 run.py 与我的包(flask__app)分开了。

【问题讨论】:

  • 请在问题上方发布完整的错误消息,包括行号,并且格式正确
  • @J.G.我已经编辑了我的帖子,希望它有用

标签: flask python-import


【解决方案1】:

当我使用您的代码时,由于循环导入而出现错误。

ImportError: cannot import name 'app' from partially initialized module 'flask_app' (most likely due to a circular import) (/home/jugmac00/Tests/stackoverflow/flask_app/__init__.py)

当我从 models.py 中删除这一行时,我可以摆脱它

from flask_app import app, bcrypt

摆脱循环导入的最简单方法是使用应用工厂模式。

https://flask.palletsprojects.com/en/1.1.x/patterns/appfactories/

这个应用工厂模式花了我一段时间才理解,但尝试理解和使用它真的很值得。

今年的 Flask-Conference 上有一段很棒的视频:

https://www.youtube.com/watch?v=xNo-eOfZH5Q

如果这听起来很难,那么我的建议是......将所有内容放在一个文件中 - 这还不错,除非应用程序变得非常大。

【讨论】:

    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多