我在烧瓶应用中遇到了进口问题。
这是我目前的结构
meteor
在我的 app/
__init__.py
config.py
db_create.py
models.py
views.py
run.py
文件中,我有以下代码:
__init__.py
在我的 from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
from app import views, models
我有以下代码:
run.py
在 #!flask/bin/python
from app import app
app.run()
我有:
db_create.py
和我的其余代码创建数据库并添加一些示例数据。
但是,当我尝试运行 from app import db
时,我收到以下错误:
db_create.py
我不确定这里有什么问题,如果是周期性进口或其他问题。
答案 0 :(得分:0)
在app/__init__.py
中你有:
app = Flask(__name__)
和
from app import views, models
那么,app
既是包名又是Flask
实例?
不要给两件事同名。
并将所有导入放在文件的顶部,这样可以至少简化您的生活。
答案 1 :(得分:0)
您的应用程序存在结构问题。
您可以从run.py
导入应用,但不应从app/db_create.py
导入该应用。这实际上是循环导入。如果您需要app/__init__.py
文件中的某些内容,请将其导出到另一个可以从db_create.py
导入的.py文件。
答案 2 :(得分:0)
此方法不起作用,因为您在app
内没有变量db_create.py
。
在__init__.py
中查看您已初始化名为app的变量。
现在在run.py
中,您可以从app
导入app directory
变量。
现在,由于db_create
和__init__
位于某个目录中,您需要像from __init__ import app
一样导入。
虽然我建议不要创建文件db_create.py
,而是在__init__.py
中使用相同的代码,因为这样做只是为了测试目的。
同样在__init__.py
中直接使用import views, models
代替from app import views, models
(因为它们也在同一目录中)
希望我能够正确解释。
答案 3 :(得分:0)
它试图找到app.py从中插入app对象,但找不到它。如果将其设置为
"from __init__ import app"
会起作用,但这也不是一个好习惯。
如果您准备使用micro app,因为烧瓶擅长并且您可能具有以下结构:
app/
app.py
app.cfg
db_create.py
models.py
所有Flask应用初始化和路由都在app.py。
中from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from db_create import DbOperations
app = Flask(__name__)
app.config.from_pyfile('app.cfg')
db = SQLAlchemy(app)
db_operations = DbOperations(db)
@app.route("/")
def home():
db_operations.create() #or something like this
....
if __name__ == '__main__':
app.run()
然后将大块代码移到app.py之外的类,如db_create.py:
class DbOperations:
def create(self, db):
... some logic