我需要导入一个在我的包的__init__.py
中初始化的变量。
======__init__.py======
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SECRET_KEY'] = 'blah'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'thermos.db')
app.config['DEBUG'] = True
db = SQLAlchemy(app)
app.config['DEBUG'] = True
import models
import views
然后在我的views.py和我的models.py中,我试图像这样导入数据库和应用程序:
===== views.py ====
from thermos import app, db
这不符合我的预期。目前,我的目录结构如下所示:
/thermos
/thermos
__init__.py
views.py
models.py
我使用的教程使用了我上面列出的确切设置,但它对我不起作用。要使代码生效,我必须进行以下更改:
===== views.py ====
from . import app, db
===== models.py ====
from . import db
为什么它不适合我?我的改变可以接受吗?我不想使用相关链接。 HALP?谢谢!
有问题的错误:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from thermos import app
File "/home/python/projects/plural_flask/thermos/thermos/__init__.py", line 16, in <module>
import models
File "/home/python/projects/plural_flask/thermos/thermos/models.py", line 5, in <module>
from thermos import db
ImportError: cannot import name db
我已经读过这些: Flask structure -- can't import application from __init__.py Python: How to import from an __init__.py file?
和其他许多人一样,但仍然无法弄清楚为什么它适用于我关注的教程,而不是在我自己的机器上使用相同的设置。
答案 0 :(得分:0)
我的回答来自另一个stackoverflow答案:Python circular importing?
基本上使用import db
而不是from thermos import db