创建数据库时循环导入
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.py
、set FLASK_APP=app.py
-> flask run
和 set 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)
第一次使用 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.py
、set FLASK_APP=app.py
-> flask run
和 set 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)