Python2.7(flask)引用模块内___init___.py的导入变量

时间:2015-07-29 07:15:29

标签: python module flask package

我需要导入一个在我的包的__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?

和其他许多人一样,但仍然无法弄清楚为什么它适用于我关注的教程,而不是在我自己的机器上使用相同的设置。

1 个答案:

答案 0 :(得分:0)

我的回答来自另一个stackoverflow答案:Python circular importing?

基本上使用import db而不是from thermos import db