创建数据库时循环导入

Circular imports when creating database

第一次使用 Flask 创建 Web 应用程序,我 运行 正在解决创建数据库的问题。我收到错误:

ImportError: cannot import 'app' from partially initialized module 'website' (most likely due to circular import). (换句话说,我什至无法 运行 应用程序以便我可以开始创建数据库;我的问题主要在于让应用程序 运行).

这可能是由于循环导入造成的,但我一直在按照教程进行操作,但我的教程似乎不起作用,即使在整个项目重组之后也是如此。出于好奇,这是现在的样子:

C:\...flaskProject
     static/
     templates/
          about-page.html
          blog-page.html
          home-page.html
          photography-page.html
     website/
          __init__.py
          modules.py
          routes.py
     app.py

问题代码可能在 app.py__init__.py 中,因此,顺序为:

from website import app

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

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from website import routes

app = Flask(__name__)
# *!* app.config['SECRET_KEY'] =
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite///:database.db'
# app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

我一直在运行执行命令 python app.pyset FLASK_APP=app.py -> flask runset FLASK_APP=__init__.py -> flask run。我在这里(以及 python 文档中)看到了很多关于循环导入的内容,这对我来说有些意义。我只是不认为它会在这里发生,但它很可能是在我不知情的情况下发生的。当我从菜单中选择 Flask 后,我还查看了 PyCharm 中启动此项目时包含的 static/ 文件,但我认为目前这与我无关。 关于循环进口索赔的任何想法?我该如何解决它,以及将来在该领域对我有帮助的任何信息?任何帮助表示赞赏。非常感谢。

由于部分初始化的模块应用程序(循环导入),您收到循环导入错误。从 app.py 调用 from website import app 时,它会初始化网站模块,即 __init__.py。在 __init__.py 中,第 3 行 from website import routes 引起了问题。您的网站模块尚未完成导入,您正在尝试从这个部分初始化的模块网站导入路由。

您的 __init__.py 中的第 3 行应替换为 -

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from website.routes import route1, route2 # This is how it should be


app = Flask(__name__)
# *!* app.config['SECRET_KEY'] =
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite///:database.db'
# app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

现在,它不会再次尝试初始化网站模块。但是,如果 routes.py 文件中有 from website import app,那么我建议将此导入移动到 app.py 文件中。

from website import app
from website.routes import route1, route2

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