3

我有以下项目结构:

./app/__init__.py
./app/main/__init__.py
./app/main/views.py
./app/models.py
./app/resources/__init__.py
./app/resources/changesAPI.py
./config.py
./manage.py

app/models.py文件具有以下行:

from app import db

db定义在app/__init__.py

db = SQLAlchemy()

我正在从 models.py 中导入类app/resources/__init__.py

from app.models import User, Task, TaskChange, Revision

但是,当模型尝试导入时它会失败db

Traceback (most recent call last):
  File "manage.py", line 5, in <module>
    from app import create_app, db, api
  File "/Users/nahuel/proj/ptcp/app/__init__.py", line 16, in <module>
    from app.resources.changesAPI import ChangesAPI
  File "/Users/nahuel/proj/ptcp/app/resources/__init__.py", line 5, in <module>
    from app.models import User, Task, TaskChange, Revision
  File "/Users/nahuel/proj/ptcp/app/models.py", line 1, in <module>
    from app import db
ImportError: cannot import name db

我究竟做错了什么?

4

1 回答 1

3

您有一个循环导入。

您正在导入create_app和from ,这会触发模块的导入,db然后触发模块的导入,然后尝试导入您的包,但由于尚未在.apimanage.pyapp.resources.changesAPI__init__.pyapp/resourcesmodelsdbapp/__init__.py

您需要将导入ChangesAPI移至文件中定义的行之后。之前定义的任何名称都可用于您的子包,之后的名称则不可用。dbapp/__init__.pyapp/__init__.pyfrom app.resources.changesAPI import ChangesAPI

于 2014-07-28T13:55:17.420 回答